组合两个排序列表的索引以形成第三个超排序列表

2024-07-08 15:44:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如: AAPL排名第一+第二=共3名,MMM排名第二和第三=共5名,AMAT排名第一和第三=共4名

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

我都不知道从哪里开始


Tags: 字符串列表mmmaaplamat
2条回答

就拿一个按累计位置排序

>>> a, b = ['AAPL', 'MMM', 'AMAT'], ['AMAT', 'AAPL', 'MMM']
>>> sorted(a, key=lambda x: a.index(x) + b.index(x))
['AAPL', 'AMAT', 'MMM']

您可以使用字典保存项目及其索引之和,然后基于索引创建预期列表:

>>> 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枚举对象

相关问题 更多 >

    热门问题