python - 列表理解与任何

标签 python python-3.x

我知道以下是列表理解语法:

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/

相关文章:

python - pyodbc 到 Sage ERP MAS 200 驱动程序错误

python - 使用 selenium webdriver 和 python 打开浏览器时出错

python - 尝试从 C 调用 Python 函数时出现段错误

python - 在python中单独执行特定数据类型的任务

python - 如何将 Pandas 数据框保存到 sav 文件中

python - 如何使用 python 消除 json 文件中的冗余

python - 从 networkx 中的 shapefile 创建图形时如何保留或至少对边缘属性进行排序?

python - Unicode 在 tkinter 中显示不正确

python - 根据两个元素对元组列表进行排序

python 3 typing varadic "apply"样式定义