3

如果列表仅包含 0,我如何在 python 中打印?

list1=[0,0,0,0,0,0]
if list1 has all 0s
print("something")

我希望输出是“某物”

4

3 回答 3

12

使用all()

if all(item == 0 for item in list1):
   print("something")

演示:

>>> list1 = [0,0,0,0,0,0]
>>> all(item == 0 for item in list1)
True

如果列表中的所有项目都是可散列的,则另一种选择是使用sets

>>> set(list1) == {0}
True

但这会在内存中创建一个集合,并且不会像 那样短路all(),因此在一般情况下,内存效率低且速度慢。

>>> list1 = [0,0,0,0,0,0]*1000 + range(1000)
>>> %timeit set(list1) == {0}
1000 loops, best of 3: 292 us per loop
>>> %timeit all(item == 0 for item in list1)
1000 loops, best of 3: 1.04 ms per loop

>>> list1 = range(1000) + [0,0,0,0,0,0]*10
>>> shuffle(list1)
>>> %timeit set(list1) == {0}
10000 loops, best of 3: 61.6 us per loop
>>> %timeit all(item == 0 for item in list1)
1000000 loops, best of 3: 1.3 us per loop
于 2013-09-14T07:32:05.973 回答
2

我认为一个非常快速的方法是使用[].count

L.count(0) == len(L)

但是,如果列表很大并且大多数不是零,那么all使用迭代器可能会更好。

于 2013-09-14T08:06:32.770 回答
0

您可以通过执行以下操作跳过列表理解/生成器表达式:

if not any(list1):
于 2013-09-14T09:28:03.750 回答