在Python中查找嵌套列表中的匹配项

1 投票
2 回答
1300 浏览
提问于 2025-04-15 23:54

我有两个大小不同的嵌套列表:

A = [[1, 7, 3, 5], [5, 5, 14, 10]]

B = [[1, 17, 3, 5], [1487, 34, 14, 74], [1487, 34, 3, 87], [141, 25, 14, 10]]

我想把列表B中所有符合条件的嵌套列表收集起来,条件是A的第3到第5个元素(也就是A[2:4])和B的第3到第5个元素(B[2:4])相等,然后把它们放到列表L里:

L = [[1, 17, 3, 5], [141, 25, 14, 10]]

另外,如果找到了匹配的情况,我还想把子列表B的最后一个元素改成子列表A的第一个元素,这样最终的结果就会是这样的:

L1 = [[1, 17, 3, 1], [141, 25, 14, 5]]

2 个回答

1
[x for x in B if any(x[2:4] == y[2:4] for y in A)]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

3

看起来这个代码可以满足你的需求:

> [b for b in B if b[2:4] in [a[2:4] for a in A]]
[[1, 17, 3, 5], [141, 25, 14, 10]]

不过,为了提高效率,你可能想先计算好A的切片。

> a_slices = [a[2:4] for a in A]
> [b for b in B if b[2:4] in a_slices]
[[1, 17, 3, 5], [141, 25, 14, 10]]

这里有个东西,看起来符合你新的要求:

> [b[:-1] + a[:1] for b in B for a in A if b[2:4] == a[2:4]]
[[1, 17, 3, 1], [141, 25, 14, 5]]

撰写回答