如果列表a的一行的[0]或[1]不存在于列表b的任何行中,那么列表a中的行将附加到列表c中,我如何创建一个列表?

2024-04-25 12:07:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表a例如:

a = [[1, 3, 7], [3, 5, 7], [-23, -34, -45]]

另一个列表b例如:

b = [1, 2, 3, 4]

我想创建一个列表c,当列表a的一行的前两列中的项目不在列表b中时,a的行被附加到列表c中。在示例列表c中,如下所示:

c = [[7], [7], [-45]]

因为a的第一行包含1和3,它们都存在于b中,第二行包含3,它们存在于b。你知道吗

我尝试了以下方法但没有成功:

for row in a:
    if row[0] or row[1] not in b:
        c.append(a)

以及

for row in a:
    if row[1] not in b:
        if row[0] not in b:
            c.append(a)

因为两者似乎只是把a复制到b

有人知道为什么我的代码不起作用吗?你知道吗

编辑:抱歉,我第一轮就把预期结果搞错了

编辑2:我把事情搞砸了-我设计错了,我的输入列表来自另一个来源,我把它们复制错了。所以我实际上想做的是

c = [ ]

a = [[1, 3, -23], [3, 5, -34], [7, 7, -45]]
b = [1, 2, 3, 4]

for row in a:
    if row[0] not in b and row[1] not in b:
        c.append(row)

谢谢所有帮忙的人。对不起,我真是个白痴。你知道吗


Tags: or项目方法代码in编辑示例列表
3条回答

只需使用setslist comprehensions

[row[2] for row in a if set(b)-set(row[:2]) != set(b)] # prints [7, 7]

可能情况不对?你知道吗

for row in a:
    if row[0] not in b or row[1] not in b:
        c.append(a)

row[0]是真的,如果不是零,那么为什么总是将a复制到b

对@muzulget的答案稍加修改:

for row in a:
    if row[0] not in b or row[1] not in b:
        c.append(a[2])

相关问题 更多 >