我知道这听起来微不足道,但我没有意识到sort()Python 的功能很奇怪.我有一个实际上是字符串形式的"数字"列表,所以我首先将它们转换为int,然后尝试排序.
list1=["1","10","3","22","23","4","2","200"]
for item in list1:
item=int(item)
list1.sort()
print list1
Run Code Online (Sandbox Code Playgroud)
给我:
['1', '10', '2', '200', '22', '23', '3', '4']
Run Code Online (Sandbox Code Playgroud)
我想要的是
['1','2','3','4','10','22','23','200']
Run Code Online (Sandbox Code Playgroud)
我查看了一些与排序数字集相关的算法,但我发现的算法都涉及排序字母数字集.
我知道这可能是一个毫无疑问的问题,但谷歌和我的教科书没有提供比.sort()功能更多或更少有用的东西.
Sea*_*ell 179
您实际上没有将字符串转换为整数.或者说,你做了,但后来你没有对结果做任何事情.你想要的是:
list1 = ["1","10","3","22","23","4","2","200"]
list1 = [int(x) for x in list1]
list1.sort()
Run Code Online (Sandbox Code Playgroud)
但是,python使你更容易:sort接受一个命名参数key,这是一个在比较之前在每个元素上调用的函数(但不修改列表)
list1 = ["1","10","3","22","23","4","2","200"]
# call int(x) on each element before comparing it
list1.sort(key=int)
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 37
你可以传递一个函数的key参数的.sort方法.有了这个,系统将按键(x)而不是x排序.
list1.sort(key=int)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,要将列表永久转换为整数,请使用该map功能
list1 = list(map(int, list1)) # you don't need to call list() in Python 2.x
Run Code Online (Sandbox Code Playgroud)
或列表理解
list1 = [int(x) for x in list1]
Run Code Online (Sandbox Code Playgroud)
Dan*_*man 12
Python的排序并不奇怪.只是这个代码:
for item in list1:
item=int(item)
Run Code Online (Sandbox Code Playgroud)
没有做你认为的事情 - item没有被替换回列表,它被简单地扔掉了.
无论如何,正确的解决方案是使用key=int其他人向您展示的.
您还可以使用:
import re
def sort_human(l):
convert = lambda text: float(text) if text.isdigit() else text
alphanum = lambda key: [ convert(c) for c in re.split('([-+]?[0-9]*\.?[0-9]*)', key) ]
l.sort( key=alphanum )
return l
这对于你可以在互联网上找到的其他东西非常相似,但也适用于像[abc0.1,abc0.2 ..]这样的字母数字
Seamus Campbell的回答对python2.x无效.
list1 = sorted(list1, key=lambda e: int(e))使用lambda功能效果很好.
昨天我遇到了同样的问题,并找到了一个名为natsort的模块,该模块可以解决您的问题。使用:
from natsort import natsorted
# Example list of strings
a = ['1', '10', '2', '3', '11']
[In] sorted(a)
[Out] ['1', '10', '11', '2', '3']
[In] natsorted(a)
[Out] ['1', '2', '3', '10', '11']
Run Code Online (Sandbox Code Playgroud)
它也适用于字典sorted。
| 归档时间: |
|
| 查看次数: |
260717 次 |
| 最近记录: |