我有一个列表。
l1 = [0, 0, 2, 0]
l2 = [0, 0, 0, 0]
如果列表中包含非零元素,我想打印列表。
输出:
如果一个列表通过,则只会打印具有非零元素的列表。在上面的示例中,只会打印 l1。
[0, 0, 2, 0]
我想知道它能有多高效。谢谢!
在列表中使用 any
:
for lst in (l1, l2):
if any(lst):
print(lst)
您还可以使用all
:
for lst in (l1, l2):
if all(x != 0 for x in lst):
print(lst)
我希望这有所帮助。
您可以使用内置函数any()
:
来自 Python 的文档:
任意(可迭代)
如果可迭代对象的任何元素为 true,则返回 True。如果 可迭代对象为空,返回 False
这是一个代码:
for l in [l1,l2, ..., ln]:
if any(l):
print(l)
你可以试试这个:
lists = [[0, 0, 0, 0],[0, 0, 2, 0]]
for l in lists:
if set(l)=={0}:
pass
else:
print l
内置any
来测试列表是否至少包含一个非 Falsy/非零元素。
零是假的,其实是唯一的假数:
>>> bool(0)
False
因此,您可以轻松执行以下操作:
for lst in (l1, l2):
if any(lst):
print(lst)
只要您的列表仅包含数字并且您不愿意对非数字进行解释,这将提供正确的结果。
在评论中回答,但我会将其作为答案发布:
for l in filter(any, (l1, l2)):
print(l)
filter
和 any
的组合使得 print
只对具有非零元素的列表执行。 any
在遇到第一个非零(或真值)值时立即返回False
。对于整数,0
是唯一bool(i)
为假的i
。