如果所有在列表==的东西

时间:2009-01-01 21:41:23

标签: python python-2.6

使用Python 2.6,有没有办法在一个语句中检查序列的所有项是否等于给定值?

[pseudocode]
my_sequence = (2,5,7,82,35)

if all the values in (type(i) for i in my_sequence) == int:
     do()

而不是说:

my_sequence = (2,5,7,82,35)
all_int = True
for i in my_sequence:
    if type(i) is not int:
        all_int = False
        break

if all_int:
    do()

4 个答案:

答案 0 :(得分:55)

使用:

all( type(i) is int for i in lst )

示例:

In [1]: lst = range(10)
In [2]: all( type(i) is int for i in lst )
Out[2]: True
In [3]: lst.append('steve')
In [4]: all( type(i) is int for i in lst )
Out[4]: False

[编辑]。根据评论制作清洁剂。

答案 1 :(得分:13)

你的意思是

all( type(i) is int for i in my_list )

修改:已更改为is。稍快一点。

答案 2 :(得分:8)

我建议:

if all(isinstance(i, int) for i in my_list):

allany于2006年首次出现Python 2.5 (feature implemented by Raymond Hettinger) 如果您使用的是旧版本的Python,则链接会提供示例实现。

我还建议使用isinstance,因为它还会捕获int的子类。

答案 3 :(得分:1)

为了完整起见,我想我会补充一个事实,即NumPy的'all'与内置的'all'不同。例如,如果通过Python(x,y)运行Python,NumPy会自动加载(并且据我所知也无法卸载),因此在尝试运行上面的代码时会产生相当意外的结果:

>>> if (all(v == 0 for v in [0,1])):
...     print 'this should not happen'
... this should not happen

有关此问题的更多信息,请参阅Stack Overflow问题 numpy all differing from builtin all 。作为解决方案,您可以使用括号括起生成器以生成列表:

>>> all( [v == 0 for v in [0,1]] )
False

或明确调用内置函数:

>>> __builtins__.all(v == 0 for v in [0,1,'2'])
False

我找到了一种方法来阻止Spyder默认导入NumPy: Spyder default module import list