python - 如果两个项目相同,则将列表内部列表移动到末尾

标签 python list

我有以下配对值列表:

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之所以有效,是因为 FalseTrue 之前排序,同时将所有对映射到仅两个键保持 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/

相关文章:

python - 使用Python/Postfix/SendMail/Mutt发送存储为文本文件的HTML电子邮件

python - 同时迭代多个列表并捕获值的差异

python - 为什么 numpy masked_array 上的 sum() 操作会将填充值更改为 1e20?

list - 你可以在 python 中一次附加到多个列表吗?

python - Pandas 列表的列以分隔行

C 请求成员 ***** 不是结构或 union

python 相当于 std::chrono::steady_clock::now();

python - 如何在不使用arcpy的情况下处理python中不支持的fiona类型?

c# - 使用 C# 在 ComboBox 中放置驱动器列表的最有效方法是什么?

python - 如何根据数值的顺序对包含组合数值和文本值的列表进行排序