检查列表是否包含与某些内容不同的元素
有没有一种有效的方法来检查列表是否包含与其他元素不同的元素?
我有很多这样的列表:
a = ["_", "_", "_", "_"]
b = ["_", "b", "_", "_"]
c = ["a", "_", "x", "_"]
它们大多是下划线,但有时有一个元素不是下划线。我只想处理那些有“内容”的人。目前,我使用 for 循环检查是否存在非下划线元素。有没有更有效的方法?
回答
对于裸布尔检查,您可以像这样使用map和any:
for lst in (a, b, c):
print(any(map("_".__ne__, lst)))
# False
# True
# True
或者更明确一点:
any(x != "_" for x in lst)
any 与您建议的设置长度方法相比,具有短路(在第一次命中时停止)的优势:
len(set(lst)) > 1
如果这使它在现实世界中更快取决于您的数据。如果您的大多数列表只是下划线,因此整个迭代,则集合转换(C 优化)可能会更快。