我有两个列表['AAPL', 'MMM', 'AMAT']
和['AMAT', 'AAPL', 'MMM']
,我想根据各自列表中每个字符串的位置创建第三个列表。
例如:
AAPL
排名第1 +第2 =总计3,MMM
排名第2和第3 =总计5,AMAT
排名第1和第3 =总计4.
最终列表将是(通过减少累积位置)['AAPL', 'AMAT', 'MMM']
。
我甚至不知道从哪里开始。
答案 0 :(得分:4)
您可以使用字典来保存带有索引总和的项目,然后根据索引创建预期列表:
>>> from collections import defaultdict
>>>
>>> d = defaultdict(int)
>>>
>>> for (ind1, j), (ind2, t) in zip(enumerate(a), enumerate(b)):
... d[j] += ind1
... d[t] += ind2
...
>>> sorted(d.keys(), key=lambda x: d[x])
['AAPL', 'AMAT', 'MMM']
如果列表长度不同,您可以使用itertools.zip_longet
(在python2 izip_longest
中)以zip
枚举对象。
答案 1 :(得分:1)
只需拿一个并按累积位置排序。
>>> a, b = ['AAPL', 'MMM', 'AMAT'], ['AMAT', 'AAPL', 'MMM']
>>> sorted(a, key=lambda x: a.index(x) + b.index(x))
['AAPL', 'AMAT', 'MMM']