2012-08-31 62 views
6

说w,x,y和z的全部都可以在列表A中。是否有快捷方式检查它是否包含只有 x - 例如。而不否定其他变量?检查列表是否只包含项目x

w,x,y和z都是单个值(不是列表,元组等等)。

+0

是w,x,y和z所有单个值还是列表? –

+0

@SteveMayne所有单个值。 – idlackage

+1

要明确一点,通过“所有单值”,你的意思是像'int'和'float'和'str'ings,或者可以(例如)'''是'list'? – DSM

回答

15
A=[w,y,x,z] 
all(p == x for p in A) 
4

此检查所有element S IN A等于x不参考任何其他变量:

all(element==x for element in A) 
+0

我认为它可以包含多个x的 –

2

如果列表中的所有项目都是可哈希:

set(A) == set([x]) 
+0

这是有点低效的,因为你必须计算该集合,而不是只是遍历'A'一次 – Claudiu

+0

是的。更紧凑。 –

+0

在新版本中,您可以使用'{x}'糖。 – sdcvvc

0

我'不知道什么没有否定其他变量意味着,但我怀疑这是你w蚂蚁:

if all(item == x for item in myList): 
    #do stuff 
2
{x} == {w,x,y,z} & set(A) 

这将工作,如果所有的[w,x,y,z],项目与A是哈希的。

0

继承人另一种方式:

>>> [x] * 4 == [x,w,z,y] 
众多的

已经说明。

0

有两种解释这个问题:

首先,是包含在x的值[W,Y,Z]:

>>> w,x,y,z=1,2,3,2 
>>> any(x == v for v in [w,y,z]) 
True 
>>> w,x,y,z=1,2,3,4 
>>> any(x == v for v in [w,y,z]) 
False 

或者,它可能意味着,他们代表了同一个对象:

>>> w,x,y,z=1,2,3,4 
>>> any(x is v for v in [w,y,z]) 
False 
>>> w,x,y,z=1,2,3,x 
>>> any(x is v for v in [w,y,z]) 
True 
10

也就是说,或者如果你不想处理的循环:

>>> a = [w,x,y,z] 
>>> a.count(x) == len(a) 
+0

我发现此方法比接受的答案快5倍。 –