4

場合:

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

最初のタプル項目で重複を削除するにはどうすればよいですか?

の結果は次のようになります。

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

b の結果は次のようになります。

[(5,2),(6,3),(4,5),(1,9)]

重複なしで両方をマージするにはどうすればよいですか?: 結果は次のようになります:

[(1,2),(2,3),(4,5),(5,2),(6,3)]

両方の交点を取得するにはどうすればよいですか?: 結果は次のようになります。

[(1,2),(4,5)]

これは簡単な方法で可能ですか?

よろしくクリス

4

2 に答える 2

1

使用セット:

>>> seen = set()
>>> s1 = [x for x in a if x[0] not in seen and not seen.add(x[0])]
>>> seen = set()
>>> s2 = [x for x in b if x[0] not in seen and not seen.add(x[0])]
>>> s1
[(1, 2), (2, 3), (4, 5)]
>>> s2
[(5, 2), (6, 3), (4, 5), (1, 9)]

連合:

>>> from itertools import chain
>>> seen = set()
>>> [x for x in chain(s1,s2) if x[0] not in seen and not seen.add(x[0])]
[(1, 2), (2, 3), (4, 5), (5, 2), (6, 3)]

交差点:

>>> se1 = set(x[0] for x in s1)
>>> se2 = set(x[0] for x in s2)
>>> inter = se1 & se2
>>> inter
set([1, 4])
>>> seen = set()
>>> [x for x in chain(s1,s2) if x[0] in inter and x[0] not in seen
                                                          and not seen.add(x[0])]
[(1, 2), (4, 5)]
于 2013-07-02T17:54:14.597 に答える
0

重複を削除するための簡単な Python3 の例を次に示します。別の寄稿者が他の 2 つをカバーしました。

ixs = {tup[0]:i for i, tup in list(enumerate(a))[::-1]}
[a[i] for i in sorted(ixs.values())]
于 2013-07-02T18:16:03.457 に答える