Python 如果全部在列表中==某事物

Python 如果全部在列表中==某事物,python,python-2.6,Python,Python 2.6,使用Python2.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:

使用Python2.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()
你是说

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

编辑:更改为
is
。稍微快一点。

使用:

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
[编辑]。根据评论进行清洁。

我建议:

if all(isinstance(i, int) for i in my_list):
并于2006年首次亮相。
如果您使用的是较旧版本的Python,那么这些链接提供了示例实现


我还建议使用,因为它还将捕获
int

的子类。为了完整起见,我想我会添加一个事实,即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
有关这方面的更多信息,请参阅堆栈溢出问题。作为一种解决方案,您可以将生成器用括号括起来,以生成一个列表:

>>> all( [v == 0 for v in [0,1]] )
False
或显式调用内置函数:

>>> __builtins__.all(v == 0 for v in [0,1,'2'])
False
我找到了阻止Spyder根据默认值导入NumPy的方法:

@S.洛特:思考否定时,
any(键入(i)!=int表示我的第一个字母)
会更有效吗?或者在平均数量的情况下相同?any和all都是有效的,这意味着一旦它们分别找到真值或假值,就停止迭代。@JV:all==和any!=在平均案例数上相同。在比较类型时,始终使用“是”!是否有人可以编辑此文件,使“my_squence”的拼写始终保持一致?天哪我的夫人,谢谢。