python是比较嵌套列表并将匹配项追加到新列表的有效方法

2024-09-30 22:27:26 发布

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

我想比较两个嵌套列表。如果每个子列表的第一个元素之间存在匹配,我希望将匹配的元素添加到一个新列表中,以便进行进一步的操作。下面是一个例子,也是我迄今为止所尝试的: 例如:

x = [['item1','somethingelse1'], ['item2', 'somethingelse2']...]
y = [['item1','somethingelse3'], ['item3','somethingelse4']...]

到目前为止我所做的尝试:

match = []
for itemx in x:
    for itemy in y:
        if itemx[0] == itemy[0]:
            match.append(itemx)

上面我尝试的是将匹配项追加到新列表中,但是我有两个很长的嵌套列表,上面我做的操作对于很长的列表来说非常慢。有没有更有效的方法来找出两个嵌套列表之间的匹配项


Tags: in元素列表formatch例子item1item2
3条回答

(这是在OP将问题从append(itemx[0])改为append(itemx)之前)

>>> {a[0] for a in x} & {b[0] for b in y}
{'item1'}

或者,如果内部列表总是成对的:

>>> dict(x).keys() & dict(y)
{'item1'}

是的,使用具有恒定时间成员资格测试的数据结构。因此,使用set,例如:

seen = set()
for first,_ in x:
    seen.add(first)

matched = []
for first,_ in y:
    if first in seen:
        matched.append(first)

或者,更简洁地使用集合/列表理解:

seen = {first for first,_ in x}
matched = [first for first,_ in y if first in seen]

IIUC使用numpy

import numpy as np
y=[l[0] for l in y]
x=np.array(x)
x[np.isin(x[:, 0], y)]

相关问题 更多 >