4

私はPython、特にリストを学ぼうとしていますが、小さな問題があります。私は2つのリストを持っています:

alist=[1,2,3,4,5,6,7,8,9,1,2,3]
blist=["a","b","c","d","e","f","g","h","i","a","b","c"]

私がやりたいのは、「両方のリスト」から重複を削除することです。つまり、alistの要素とblistの対応する要素(ペア)が同じである場合にのみ、それらを削除します。私は次のような結果を期待しています:

alist=[1,2,3,4,5,6,7,8,9]
blist=["a","b","c","d","e","f","g","h","i"]

だから、私は最初にzipでセットをしようとします:

kk=set(zip(alist,blist))

そして、次のことを行います。

alist[:],blist[:]=zip(*kk)

それから私は得る:

alist=[5, 6, 4, 7, 3, 8, 2, 1, 9]
blist=['e', 'f', 'd', 'g', 'c', 'h', 'b', 'a', 'i']

ご覧のとおり、順序は維持されていません。どういうわけか、「ソート済み」と「インデックス」を使用してリストを正しい順序で取得できるかどうか疑問に思いました。任意のガイダンスをいただければ幸いです。

Pythonのバージョンは2.7.3です

4

2 に答える 2

4

これに使用できますcollections.OrderedDict

In [16]: d = collections.OrderedDict.fromkeys(zip(alist, blist))

In [17]: [k[0] for k in d]
Out[17]: [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [18]: [k[1] for k in d]
Out[18]: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

注文されたセット(利用可能な場合)は、おそらくさらにクリーンなソリューションにつながるでしょう。

于 2013-01-04T14:06:59.927 に答える
1

OrderedDictを使用します:

In [1]: alist=[1,2,3,4,5,6,7,8,9,1,2,3]
In [2]: blist=["a","b","c","d","e","f","g","h","i","a","b","c"]

In [3]: from collections import OrderedDict
In [6]: od = OrderedDict().fromkeys(zip(alist, blist))

In [7]: od
Out[7]: OrderedDict([((1, 'a'), None), ((2, 'b'), None), ((3, 'c'), None), ((4, 'd'), None), ((5, 'e'), None), ((6, 'f'), None), ((7, 'g'), None), ((8, 'h'), None), ((9, 'i'), None)])
于 2013-01-04T14:08:15.993 に答える