python数字字符串排序,关于python:如何用数字排序字符串列表?

我知道这听起来很简单,但我没有意识到Python的sort()函数很奇怪。我有一个实际上是字符串形式的"数字"列表,所以我首先将它们转换为整数,然后尝试排序。

list1=["1","10","3","22","23","4","2","200"]

for item in list1:

item=int(item)

list1.sort()

print list1

给我:

['1', '10', '2', '200', '22', '23', '3', '4']

我想要的是

['1','2','3','4','10','22','23','200']

我环顾四周寻找了一些与排序数字集相关的算法,但我发现它们都涉及排序字母数字集。

我知道这可能是一个很简单的问题,但是谷歌和我的教科书没有提供任何比.sort()功能更有用或更不有用的东西。

请注意,for循环并不像我怀疑的那样。

你没有及时更新list1。你为什么认为list正在更新?

当list1=['1'、'1.10'、'1.11'、'1.1'、'1.2']作为输入提供时,会出现类似的问题。我得到的不是输出为['1'、'1.1'、'1.2'、'1.10'、'1.11'],而是['1'、'1.1'、'1.10'、'1.11'、'1.2']

在python 3中,您可能希望使用sorted(mylist)

实际上您还没有将字符串转换为整数。或者更确切地说,你做了,但是你没有对结果做任何事情。你想要的是:

list1 = ["1","10","3","22","23","4","2","200"]

list1 = [int(x) for x in list1]

list1.sort()

如果出于某种原因,您需要保留字符串而不是整数(通常是个坏主意,但可能需要保留前导零或其他内容),则可以使用键函数。sort接受一个命名参数key,它是一个函数,在对每个元素进行比较之前对其进行调用。比较键函数的返回值,而不是直接比较列表元素:

list1 = ["1","10","3","22","23","4","2","200"]

# call int(x) on each element before comparing it

list1.sort(key=int)

当我在2.7中尝试key=int时,我得不到任何结果。

@ki4jgt:它可以与python 3.3.2一起工作。

如果列表元素存储为"integer",那么在浮点值的情况下应该如何处理?例如,list1=[1,1.10,1.11,1.1,1.2]

@Sathish这应该有效:list1.sort(key=float)。

@ki4jgt sort方法修改列表并返回none。因此,不使用list1 = list1.sort(key=int),只使用list1.sort(key=int),列表1将被排序。

@ki4jgt.sort()是一个就地运算符,它返回none,它对列表进行排序,您可能需要使用sorted()。

您可以将函数传递给key参数给.sort方法。这样,系统将按键(X)而不是X进行排序。

list1.sort(key=int)

btw,要将列表永久转换为整数,请使用map函数

list1 = list(map(int, list1))   # you don't need to call list() in Python 2.x

或列表理解

list1 = [int(x) for x in list1]

如果您想使用sorted()函数:sorted(list1, key=int)。

它返回一个新的排序列表。

Python的种类并不奇怪。只是这个代码:

for item in list1:

item=int(item)

并没有做你认为应该做的事情——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….]

希默斯·坎贝尔的回答对Python2.x不起作用。使用lambda函数的list1 = sorted(list1, key=lambda e: int(e))运行良好。

尝试此操作,它将按降序对列表进行排序(在这种情况下不需要指定键):

过程

listB = [24, 13, -15, -36, 8, 22, 48, 25, 46, -9]

listC = sorted(listB, reverse=True) # listB remains untouched

print listC

输出:

[48, 46, 25, 24, 22, 13, 8, -9, -15, -36]

对数字列表进行排序的简单方法

numlists = [5,50,7,51,87,97,53]

numlists.sort(reverse=False)

print(numlists)

昨天我处理了同样的问题,发现了一个名为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']

最近的解决方案是正确的。您以字符串形式读取解决方案,在这种情况下,顺序是1,然后是100,然后是104,然后是2,然后是21,然后是2001001010,3等等。

您必须将输入转换为int:

排序字符串:

埃多克斯1〔9〕

排序整数:

埃多克斯1〔10〕

要进行强制转换,只需将字符串列表放入int(blahblah)中即可。

再一次:

stringList = (1, 10, 2, 21, 3)

newList = int (stringList)

print newList

=> returns (1, 2, 3, 10, 21)

typeerror:int()参数必须是字符串或数字,而不是"tuple"

另外,字符串列表中的字符串应该有引号。

这是一个地狱般的预言:"最新的解决方案是正确的";)

python3排序功能:

if __name__== '__main__':

n = list(input())

print(n)

print(sorted(n))

如果您想使用数字串,最好使用另一个列表,如我的代码所示,它会很好地工作。

list1=["1","10","3","22","23","4","2","200"]

k=[]

for item in list1:

k.append(int(item))

k.sort()

print(k)

scores = ['91','89','87','86','85']

scores.sort()

print (scores)

这对我使用Python3版很有效,但在版本2中没有。

尝试在那里用"11"和"100"进行排序,这就是事情变得有趣的时候。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值