Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何使用浮点值对列表排序_Python_List_Sorting - Fatal编程技术网

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

如何对包含浮点值的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

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]
    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],其中作为排序列表,即[1,2,2.3,3.1,4.5]将返回,在这种情况下,将分配给y

  • 使用为列表提供的sort方法调用::在这种情况下,sort方法调用将对实际列表进行排序

    x=[1,2,3.1,4.5,2.3]
    x.sort()
    
    在本例中,x将被排序,因此如果您尝试打印x,它将类似于[1,2,2.3,3.1,4.5]

您可以根据需要使用这些方法中的任何一种


希望能有帮助。快乐编码:)

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()