如何在两个元组列表中对元组的第一个元素进行交集操作

-1 投票
3 回答
1251 浏览
提问于 2025-04-17 23:56

我有两个包含元组的列表:

a = [(4,5),(7,6),(3,2),(9,6),(25,7)]
b = [(4,6),(7,2),(6,1),(57,12)]

我想要一个新的列表,这个列表里包含的是那些第一个元素值相同的元组。

c = [(4,5),(4,6),(7,6),(7,2)]

我试过以下代码:

c=[]
for i in a:
m,n=i
    for j,k in b:
        if m==j:
            i=i[:]
            i=i+(j,k)
            c=i
print c

输出结果是:(7,6,7,2)

我哪里出错了呢?

3 个回答

-1

你可以试试这个模块 itertools

import itertools
list(itertools.chain(*[e for e in zip(a,b) if e[0][0] == e[1][0]]))
0

虽然这个问题问得不太好,因为你的问题不太清楚,但我会尽量理解你真正想要的。

你想要做的是遍历两个列表,如果在列表 a 中有一个元素,它的第一个元组元素和列表 b 中同一位置的元素相同,那么就把这两个元素放到列表 c 中。

那么你想要的结果是这样的:

for el_a, el_b in zip(a,b):
    if el_a[0]==el_b[0]:
        c.append(el_a)
        c.append(el_b)

你代码中的问题是 i=i+(j,k) 这个操作会把元组合并成更长的元组。在你的例子中,它把 (7,6)(7,2) 合并成了 (7,6,7,2)。这个步骤其实是不需要的。

第二个问题是,要把元素添加到列表中,你需要用 c.append(element),而不是像你现在这样用 c=i

0

首先,你没有更新c的值,因为你每次都把它和i相等。所以,每当满足if条件时,c的值都会被替换。

其次,i=i+(j,k)会把两个列表合并在一起。比如,在你的例子中,当你把i设为(7,6),j设为7,k设为2时(根据观察,if条件是满足的),那么i就变成了(7,6,7,2)。

我相信这样可以解决你的问题。

a=[(4,5),(7,6),(3,2),(9,6),(25,7)]
b=[(4,6),(7,2),(6,1),(57,12)]
c=[]
for i in a:
m,n=i
for j,k in b:
    if m==j:
        c.append(i)
        break

for i in b:
m,n=i
for j,k in a:
    if m==j:
        c.append(i)
        break

print (c)

撰写回答