我想对列表进行排序。如何通过内部列表的排序索引对字符列表进行排序?
这里是列表的我的输入列表:
[('H', 'A'), ('H', 'C'), ('H', 'K'), ('A', 'C'), ('A', 'K'), ('C', 'K')]
而且我所要的输出是这样
[('A', 'C'), ('A', 'H'), ('A', 'K'), ('C', 'H'), ('C', 'K'), ('H', 'K')]
我想对列表进行排序。如何通过内部列表的排序索引对字符列表进行排序?
这里是列表的我的输入列表:
[('H', 'A'), ('H', 'C'), ('H', 'K'), ('A', 'C'), ('A', 'K'), ('C', 'K')]
而且我所要的输出是这样
[('A', 'C'), ('A', 'H'), ('A', 'K'), ('C', 'H'), ('C', 'K'), ('H', 'K')]
你的输出表明需要在元组和最后的两个元素进行排序名单。所以只是做:
l = [('H', 'A'), ('H', 'C'), ('H', 'K'), ('A', 'C'), ('A', 'K'), ('C', 'K')]
print(sorted([tuple(sorted(x)) for x in l]))
结果:
[('A', 'C'), ('A', 'H'), ('A', 'K'), ('C', 'H'), ('C', 'K'), ('H', 'K')]
这个重建与你的元组列表,现在排序内,并执行对这些元组sort
。
嗯,我以为你使用了一个列表理解,很高兴,现在我看到你使用了一个生成器表达式,现在我不开心...... :-)对于某些操作,列表理解将会快得多,因为结果被转换为无论如何,一个列表。除'str.join'之外的'sorted'就是其中之一。如果你想得到更快:'sort(map(iteration_utilities.chained(sorted,tuple),lst))''(需要一个[外部库](http://iteration-utilities.readthedocs.io/en/latest/ api/cfuncs.html#iteration_utilities.chained),但仅仅意味着一个“不错的信息”:D) – MSeifert
噢,right:'sorted'需要一次完整列表!将修复!我自己评论所有使用'str.join'的帖子。我无法习惯这个双括号的东西。有一天必须要做某件事。由于'map'返回一个迭代器,所以''你的排序(映射)'解决方案也需要重建列表。 –
但是'iteration_utilities.chained(sorted,tuple)'不需要经过任何python层,因为所有3个函数在C中实现。这提供了比一个输入更多的加速。 – MSeifert
你可以尝试这样的事:
data=[('H', 'A'), ('H', 'C'), ('H', 'K'), ('A', 'C'), ('A', 'K'), ('C', 'K')]
print(sorted(list(map(lambda i:(i[0],i[1]) if i[0]<i[1] else (i[1],i[0]),data))))
输出:
[('A', 'C'), ('A', 'H'), ('A', 'K'), ('C', 'H'), ('C', 'K'), ('H', 'K')]
啊,你的意思是你要包含的元组也进行排序? –
你确定这是列表列表的语法吗? – kouty
输出显示内部元组也需要排序。 –