我有两个元组列表
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)
我哪里错了......请帮助我 谢谢
答案 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]]))