python 中的小数排序
Sorting decimals in python
我有一个列表
list1 = ["1.10","1.1","1.23","2.20","2.2"]
我用了
list1.sort(key=float)
给出了输出
list1 = ["1.10","1.1","1.23","2.20","2.2"]
但是我正在寻找这个:
list1 = ["1.1","1.10","1.23","2.2","2.20"]
有什么想法可以做到这一点吗?
这不是解决方案,但我已经尽我所能开始了:
string1 = ["1.10","1.1","1.23","2.2","2.20"]
for x in string1:
if x.find('0') > 0:
place = string1.index(x)
string1.remove(x)
string1.insert(place+1, x)
print (string1)
它现在遇到的唯一问题是随着列表的迭代,它会一次又一次地遍历相同的值,将它们向前推。也许一个功能可以防止这种情况发生。
如果你想考虑字符串的长度,你必须将它告诉 key 函数。我们必须构造一个键,其中首先考虑 float
值,然后考虑字符串的长度。
最简单的方法是用这两个值创建一个元组。
>>> list1 = ["1.10","1.1","1.23","2.20","2.2"]
>>> list1.sort(key=lambda x: (float(x), len(x)))
>>> list1
['1.1', '1.10', '1.23', '2.2', '2.20']
我有一个列表
list1 = ["1.10","1.1","1.23","2.20","2.2"]
我用了
list1.sort(key=float)
给出了输出
list1 = ["1.10","1.1","1.23","2.20","2.2"]
但是我正在寻找这个:
list1 = ["1.1","1.10","1.23","2.2","2.20"]
有什么想法可以做到这一点吗?
这不是解决方案,但我已经尽我所能开始了:
string1 = ["1.10","1.1","1.23","2.2","2.20"]
for x in string1:
if x.find('0') > 0:
place = string1.index(x)
string1.remove(x)
string1.insert(place+1, x)
print (string1)
它现在遇到的唯一问题是随着列表的迭代,它会一次又一次地遍历相同的值,将它们向前推。也许一个功能可以防止这种情况发生。
如果你想考虑字符串的长度,你必须将它告诉 key 函数。我们必须构造一个键,其中首先考虑 float
值,然后考虑字符串的长度。
最简单的方法是用这两个值创建一个元组。
>>> list1 = ["1.10","1.1","1.23","2.20","2.2"]
>>> list1.sort(key=lambda x: (float(x), len(x)))
>>> list1
['1.1', '1.10', '1.23', '2.2', '2.20']