繁体   English   中英

如何按数字顺序而不是字母顺序对列表中的元素进行排序

[英]how to sort the elements in a list in numerical order and not alphabetical

我有一个列表,其中包含带有数字的句子,我想按数字而不是字母顺序排序。 但是当我使用排序 function 时,它按字母而不是数字对元素进行排序,我该如何解决这个问题?

num = ['ryan has 8 apples','charles has 16 bananas','mylah has 3 watermelons']
num.sort()
print(num)

output:
['charles.....','mylah.....','ryan......']

如您所见,它按字母顺序排序,但这不是我预期的 output

点代表句子的 rest

expected result:

['mylah has 3 watermelons','ryan has 8 apples','charles has 16 bananas']

这是预期的 output ,其中元素按数字而非字母顺序排序

将列表以dict的形式放入,key为从字符串中提取的数值,value为字符串?

然后,您可以根据键对字典进行排序吗?

您需要传入一个键来对它们进行排序,该键将字符串拆分并将数字解析为要排序的数字,如果您希望具有相同数字的那些,您也可以按字母顺序排序。

sorted(num, key=lambda x: (int(x.split()[2]), x))

或者

num.sort(key=lambda x: (int(x.split()[2]), x))

您需要使用key=sort知道您要为每个元素分配哪个值进行排序。

如果字符串始终是结构化的,您可以使用:

num = ['ryan has 8 apples','charles has 16 bananas','mylah has 3 watermelons']
num.sort(key=lambda x: int(x.split(' ')[2]))
print(num)

如果它们更复杂,请查看正则表达式。

到目前为止,解决方案专注于特定于字符串结构的解决方案,但会因字符串结构略有不同而失败。 如果我们只提取字符串的数字部分,然后转换为int ,我们将得到一个可以传递给排序函数的 key 参数的值:

num.sort(
    key=lambda s: int(''.join(c for c in s if c.isdigit()))
)

key 参数允许您指定要排序的数据的某些替代方面,在这种情况下,由 lambda function 提供的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM