2016-08-24 5 views
1

タプル(x、y、z)で構成される2つのリストを照合しようとしています。私はそれらをz値に基づいて合わせる必要があり、両方のリストに共通ではないz値を含むタプルを削除する必要があります。2つのリストをPythonでまとめて整列する

入力:

a = [(0,0,0),(3,4,1),(5,3,2),(1,2,3)] 
b = [(0,1,1),(2,3,2),(3,4,4)] 

出力:

a1 = [(3,4,1),(5,3,2)] 
b1 = [(0,1,1),(2,3,2)] 

Z値が繰り返されない整数になります。

+0

繰り返し要素がある場合はどう? – vz0

+0

OPに編集しました。 z値は整数であり、繰り返されることはありません。 – Roj

答えて

0

これは部分的にあなたの要件を満たし、良い出発点になります。 ここから、反復のケースとあなたのものを注文する方法を返すためにそれを微調整することができます。

a= [(0,0,0),(3,4,1),(5,3,2),(1,2,3)] 
b= [(0,1,1),(2,3,2),(3,4,4)] 
a1=[] 
b1=[] 
for i in a: 
    for j in b: 
     if i[2] == j[2]: 
      a1.append(i) 
      b1.append(j) 
4
common_z = set([tup[2] for tup in a]).intersection([tup[2] for tup in b]) 
a_ = [tup for tup in a if tup[2] in common_z] 
b_ = [tup for tup in b if tup[2] in common_z] 

>>> a_ 
[(3, 4, 1), (5, 3, 2)] 

>>> b_ 
[(0, 1, 1), (2, 3, 2)] 
0

あなたにsetを使用することによって、それを達成することができる:あなたはこのようにコードを変更することができます

>>> a = [(0,0,0),(3,4,1),(5,3,2),(1,2,3)] 
>>> b = [(0,1,1),(2,3,2),(3,4,4)] 
# Intersection of z co-ordinates in 'a' and 'b' list 
>>> z_ab = set(map(lambda x: x[2], a)) & set(map(lambda x: x[2], b)) 

>>> new_a = filter(lambda x: x[2] in z_ab, a) 
# new_a = [(3, 4, 1), (5, 3, 2)] 
>>> new_b = filter(lambda x: x[2] in z_ab, b) 
# new_b = [(0, 1, 1), (2, 3, 2)] 
0

a = [(0,0,0),(3,4,1),(5,3,2),(1,2,3)] 
b = [(0,1,1),(2,3,2),(3,4,4)] 

a_dict = {z:[x,y] for x,y,z in a} 
b_dict = {z:[x,y] for x,y,z in b} 

a1=[] 
b1=[] 

for item in a_dict.keys(): 
    if item in b_dict.keys(): 
     a_dict[item].append(item) 
     a1.append(tuple(a_dict[item])) 
     b_dict[item].append(item) 
     b1.append(tuple(b_dict[item])) 

print(a1) 
print(b1) 
関連する問題