4

我正在尝试学习 python,尤其是列表,但我有一个小问题。我有两个清单:

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 回答