结合两个排序列表的指数形成第三个超排列表

时间:2016-09-01 03:07:23

标签: python list

我有两个列表['AAPL', 'MMM', 'AMAT']['AMAT', 'AAPL', 'MMM'],我想根据各自列表中每个字符串的位置创建第三个列表。

例如: AAPL排名第1 +第2 =总计3,MMM排名第2和第3 =总计5,AMAT排名第1和第3 =总计4.

最终列表将是(通过减少累积位置)['AAPL', 'AMAT', 'MMM']

我甚至不知道从哪里开始。

2 个答案:

答案 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']