如何在两个不同的元组列表中交叉元组的第一个元素

时间:2014-03-26 06:45:04

标签: python list tuples intersection

我有两个元组列表

     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 个答案:

答案 0 :(得分:0)

首先,你没有更新c的值,因为你每次都将它等同于i。因此,c将在每个if条件满足时被替换。

其次,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)

答案 1 :(得分: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)合并,后者变为{{1} }}。你不需要这一步。

第二个问题是,要将元素添加到列表中,您需要执行(7,6,7,2),而不是c.append(element),就像您现在正在做的那样。

答案 2 :(得分:-1)

您可以使用模块itertools

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