我有一个单词 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/