python - 使用长度和字母顺序对列表进行排序

标签 python python-2.7 sorting

我有一个单词 HACK 的所有组合的列表像这样:

lista = ['H', 'A', 'C', 'K', 'HA', 'HC', 'HK', 'AC', 'AK', 'CK']

我尝试使用以下方法对以上内容进行排序:

lista.sort(lambda x,y:cmp(len(x),len(y)))

给了我同样的结果。

如何按长度和字母顺序排序。

预期输出:

['A', 'C', 'H', 'K', 'AC', 'AH', 'AK', 'CH', 'CK', 'HK']

更新:

from itertools import combinations
inp = "HACK 2".split(" ")
lista = []
for i in range(1,int(inp[1])+1):

    for item in list(combinations(inp[0],i)):

        lista.append("".join(item))

lista = sorted(lista, key=lambda x: (len(x), x))

print lista

#Output
['A', 'C', 'H', 'K', 'AC', 'AK', 'CK', 'HA', 'HC', 'HK']

#Expected Output
['A', 'C', 'H', 'K', 'AC', 'AH', 'AK', 'CH', 'CK', 'HK']

我迭代组合的方式还有什么问题吗?

最佳答案

list.sort , sorted接受可选的关键字参数key。 key函数的返回值用于比较元素,而不是元素本身。

对于您的情况,您可以使用返回(长度,字符串本身)元组的键函数:

>>> lista = ['H', 'A', 'C', 'K', 'HA', 'HC', 'HK', 'AC', 'AK', 'CK']
>>> sorted(lista, key=lambda x: (len(x), x))
['A', 'C', 'H', 'K', 'AC', 'AK', 'CK', 'HA', 'HC', 'HK']

关于python - 使用长度和字母顺序对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43650943/

相关文章:

python - 需要帮助在 wxPython 中使用 self.MemoryDC

python - 如何在开放式简历中使ROI线移动或让用户用鼠标绘制它

python - 如何递归地压平嵌套字典?

javascript - 计算常用字符出现频率

arrays - 合并排序变体 n+m,困惑

python - Kivy:解析行为

python - 为什么即使没有要打印的数据,打印命令也会换行

python - 列表理解嵌套在字典中的列表

java - 插入排序与二进制搜索?

python - 如何使用Beautifulsoup4和Python 3 Web抓取youtube成绩单