Python 如果全部在列表中==某事物
使用Python2.6,有没有办法在一条语句中检查序列的所有项是否等于给定值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:
[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”的拼写始终保持一致?天哪我的夫人,谢谢。