0

我的目标是让一个列表的重复项根据其对应的索引值将另一个列表的元素组合在一起,并删除第一个列表的重复项,以便两个列表的索引数量仍然相等。

这是我要更改的列表的开头:

X = ['0', '1', '0', '1', '0', '1', '0']
Y = ['a', 'm', 'z', 'G', 'h', 'w', '22']

这是我正在寻找的结果:

X = [0,1]
Y = ['azh22', 'mGw']

顺序也与第二个列表(列表 Y)中的组合项目无关,只要它们基于列表 X 中的项目组合在一起即可。

我仍然是编程的菜鸟,而这个让我很难过。谢谢!

4

2 回答 2

5

您可以使用defaultdict

>>> from collections import defaultdict
>>> d = defaultdict(str)
>>> for i, j in zip(X, Y):
...     d[i] += j
... 
>>> print d
defaultdict(<type 'str'>, {'1': 'mGw', '0': 'azh22'})
>>> print d.items()
[('1', 'mGw'), ('0', 'azh22')]
>>> X = d.keys()
>>> Y = d.values()
>>> print X
['1', '0']
>>> print Y
['mGw', 'azh22']
于 2013-10-05T23:27:59.073 回答
1

将两个列表压缩在一起:

In [15]: zip(X, Y)
Out[15]:
[('0', 'a'),
 ('1', 'm'),
 ('0', 'z'),
 ('1', 'G'),
 ('0', 'h'),
 ('1', 'w'),
 ('0', '22')]

并将其变成字典:

from collections import defaultdict

d = defaultdict(str)

for key, value in zip(X, Y):
    d[key] += value  # If the key doesn't exist, it'll default to an empty string

现在你有了结果字典,我认为它比两个列表更容易使用:

{'1': 'mGw', '0': 'azh22'}
于 2013-10-05T23:28:47.733 回答