如果列表中的所有==某事

Zoo*_*tor 25 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()
Run Code Online (Sandbox Code Playgroud)

而不是说:

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()
Run Code Online (Sandbox Code Playgroud)

Aut*_*tic 55

使用:

all( type(i) is int for i in lst )
Run Code Online (Sandbox Code Playgroud)

例:

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
Run Code Online (Sandbox Code Playgroud)

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

  • 你可以省略列表理解!一个简单的生成器表达式就足够了(而且效率更高). (9认同)

S.L*_*ott 14

你的意思是

all( type(i) is int for i in my_list )
Run Code Online (Sandbox Code Playgroud)

编辑:已更改为is.稍快一些.


tzo*_*zot 8

我会建议:

if all(isinstance(i, int) for i in my_list):
Run Code Online (Sandbox Code Playgroud)

allany于2006年首次出现在Python 2.5中(由Raymond Hettinger实现的功能).
如果您使用的是旧版本的Python,则链接会提供示例实现.

我也建议使用,isinstance因为它也会捕获子类int.