【发布时间】:2021-03-04 18:36:04
【问题描述】:
我有两个这样的字符串列表(两个列表有相同的项目,但顺序不同):
lst1 = ['C', 'H', 'H', 'H', 'C', 'O', 'O', 'H']
lst2 = ['H', 'H', 'C', 'O', 'H', 'O', 'H', 'C']
要根据lst1 对lst2 进行排序,我想为lst1 中的每个项目找到lst2 索引。对于重复项,我想采用尚未采用的最小索引。
我想知道获取这样一个索引列表的最快方法:
ids = [2, 0, 1, 4, 7, 3, 5, 6]
然后我可以对lst2 进行排序
newlst2 = [lst2[i] for i in ids]
由于有重复,获取列表索引的正常方式
ids = [lst2.index(x) for x in lst1]
会给出错误的结果
ids = [2, 0, 0, 0, 2, 3, 3, 0]
有什么建议吗?
【问题讨论】:
-
预期结果是什么?
-
ids = [2, 0, 1, 4, 7, 3, 5, 6]是预期结果 -
“获取列表索引
ids = [lst2.index(x) for x in lst1]的正常方式”不是正常的方式。这是一种非常低效的方式。您通常应该避免这种情况。 -
您究竟为什么要以这种复杂的方式计算
newlst2?还是根本没有?你不只是得到与lst1相同的东西吗? -
因为实际上字符串是由 Molecule 类的属性给出的。您可能会注意到,字符串代表化学元素。我想根据名称“CH3COOH”的顺序对 CH3COOH 分子的原子进行排序。
标签: python list sorting indexing duplicates