如何在两个元组列表中对元组的第一个元素进行交集操作
我有两个包含元组的列表:
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)