我有以下配对值列表:
a = [['A', 'B'], ['A', 'C'], ['D', 'D'], ['C', 'D']]
此列表可以包含一对或多对由同一项目组成的显着对:
['D', 'D']
我想将这些对移动到列表的末尾以获得:
a = [['A', 'B'], ['A', 'C'], ['C', 'D'], ['D', 'D']]
我想不通,但我相信我不会太远:
a.append(a.pop(x) for x in range(len(a)) if a[x][0] == a[x][1])
最佳答案
直截了当sorting :
a = [['A', 'B'], ['A', 'C'], ['D', 'D'], ['C', 'D']]
a = sorted(a, key=lambda x: x[0] == x[1])
# [['A', 'B'], ['A', 'C'], ['C', 'D'], ['D', 'D']]
这个简单的key function之所以有效,是因为 False
在 True
之前排序,同时将所有对映射到仅两个键保持 stability .这种方法的缺点是排序是 O(N_logN)
。对于没有不必要的列表连接的线性解决方案,您可以使用 itertools.chain
使用适当的生成器:
from itertools import chain
a = list(chain((p for p in a if p[0] != p[1]), (p for p in a if p[0] == p[1])))
关于python - 如果两个项目相同,则将列表内部列表移动到末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47968530/