我知道以下是列表理解语法:
List2 = [item for item in List1 if item=='test']
但是对于嵌套列表理解,语法会改变它在普通程序中的出现方式:
List3 = [ y for x in toplevelForLoop for y in x ]
根据逻辑,if 循环可以出现在第一个或第二个 for 循环之后,但顺序与正常程序中的顺序类似。
以下是否可以接受?我正在尝试检查 ListB 中的项目是否包含在 ListA 中的项目中
代码:
for itemA in ListA:
if any([ itemB in itemA for itemB in ListB ])
上面的代码等同于下面的吗?
代码:
if any([ itemB in itemA for itemA in ListA for itemB in ListB ])
最佳答案
具有多个 for
的列表理解等同于嵌套的 for
循环。这两个是等价的:
a = [[1, 2], [3, 4]]
## With comprehension
b = [
number
for numbers in a
for number in numbers
]
## Without comprehension
b = []
for numbers in a:
for number in numbers:
b.append(number)
# b = [1, 2, 3, 4]
any
如果迭代器中的任何项目(不需要是列表)为真,则为真
assert any([True, False, False]) == True
assert any(['string', '', '']) == True
assert any([1, 0, 0]) == True
assert any([False, False, False]) == False
assert any(['', '', '']) == False
assert any([0, 0, 0]) == False
您的两种情况并不等同。稍微扩展一下:
for itemA in ListA:
if any([ itemB in itemA for itemB in ListB ]):
print("at least some item from ListB exist in itemA")
上面的代码将为 ListA
中包含 ListB
中任何元素的每个项目打印一行。
如果上面的代码至少打印一行,下面的代码将只打印一行:
if any([ itemB in itemA for itemA in ListA for itemB in ListB ]):
print("at least some item from ListB exist in at at least one item from ListA")
关于python - 列表理解与任何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58229352/