Python如何使用浮点值对列表排序
如何对包含浮点值的python列表进行排序Python如何使用浮点值对列表排序,python,list,sorting,Python,List,Sorting,如何对包含浮点值的python列表进行排序 list1 = [1, 1.10, 1.11, 1.1, 1.2] 或 预期的结果是 list_val = ['1', **'1.1', '1.2'**, '1.10', '1.11'] 但是使用sort()方法返回的结果返回 [1, 1.1000000000000001, 1.1000000000000001, 1.1100000000000001, 1.2] 或 但是,这里的1.2应该介于1.1和1.10之间,只需使用sorted: sor
list1 = [1, 1.10, 1.11, 1.1, 1.2]
或
预期的结果是
list_val = ['1', **'1.1', '1.2'**, '1.10', '1.11']
但是使用sort()方法返回的结果返回
[1, 1.1000000000000001, 1.1000000000000001, 1.1100000000000001, 1.2]
或
但是,这里的
1.2
应该介于1.1
和1.10
之间,只需使用sorted
:
sorted(list1, key=float)
这将在比较之前将元素转换为float,因此它既适用于字符串列表,也适用于float列表(或int,不管它值多少)。您可以使用:
list1 = sorted(list1)
如果是第二种格式(作为字符串),则可以使用key参数将其转换为float,方法是:
list1 = sorted(list1, key=float)
键参数需要一个函数,该函数将在使用转换后的值进行排序之前转换值,但使用sort()方法保留原始值
sort()
方法和sorted()
方法之间的区别在于,sort()
正在修改应用该方法的对象
换句话说,除非在应用接受的解决方案时将列表分配给变量,否则不会修改列表,而
sort()
则会修改列表。可以通过两种方式对任何列表进行排序
- 使用排序方法::在这种情况下,排序方法将返回一个排序列表,但实际列表保持不变
在这种情况下,x仍然保持为[1,2,3.1,4.5,2.3],其中作为排序列表,即[1,2,2.3,3.1,4.5]将返回,在这种情况下,将分配给yx=[1,2,3.1,4.5,2.3] y = sorted(x) y = sorted(x,key=float) #in case if the values were there as string.
- 使用为列表提供的sort方法调用::在这种情况下,sort方法调用将对实际列表进行排序
在本例中,x将被排序,因此如果您尝试打印x,它将类似于[1,2,2.3,3.1,4.5]x=[1,2,3.1,4.5,2.3] x.sort()
希望能有帮助。快乐编码:)Hi,只需使用sort()方法即可:>>>list1.sort()这是两个非常不同的列表。你可能并不真正想要第二个,除非你第一次把它作为输入。您可以使用
floatlist=[stringlist中x的float(x)]
谢谢您的回答。但这不起作用。预期结果是list_val=['1','1.1','1.2','1.10','1.11',],但返回的结果是[1.0,1.10000000000001,1.110000000001,1.10000000000001,1.2]。sort()方法返回['1','1.1','1.10','1.11','1.2']。这里的“1.2”应该介于“1.1”和“1.10”之间。哦,哇,在添加预期的结果列表之前,这是重复的,没有人回答实际的(问得不好)问题。加上预期的结果,每个答案都是错误的,重复的标签也是错误的。sathish不希望浮点数按数值排序,但更像是按版本号排序。这是一个完全不同的问题。这个问题的答案是:不要与map
混淆,key
参数指定了元素应该如何排序,但在排序时不会改变它们。很好,我编辑了我的答案来澄清这一点。我建议使用sorted和lambda函数作为键。我已经用x=[1,1.10,1.11,1.1,1.2]更新了答案。您将得到错误的输出。@sathish>>>x=[1,1.10,1.11,1.1,1.2]>>sorted(x)[1,1.1,1.1,1.11,1.2]>>x.sort()>>x[1,1.1,1.1,1.11,1.2]这就是我得到的输出!!我想这是正确的顺序,不是吗??如果不能帮助我,我的数学不是很好@萨提斯:1.10
与1.1
是一样的。您是否希望它的排序与1.1
有所不同?实际上,数字顺序将类似于1.1、1.2、1.3、…、1.9、1.10、1.11,对吗?我希望我的输出也能达到同样的效果。仅供参考:我有一个小的变通方法,将“1.1”改为“1.01”,将1.2改为“1.02”,依此类推。所以这里[1,1.10,1.11,1.01,1.02]的排序很好。这可能是一个小的解决方法,而不是一个算法。
list1.sort()
print(list1)
x=[1,2,3.1,4.5,2.3]
y = sorted(x)
y = sorted(x,key=float) #in case if the values were there as string.
x=[1,2,3.1,4.5,2.3]
x.sort()