【问题标题】:How do you sort a list of lists by the second element in each list, when the second element is a number with decimals? [duplicate]当第二个元素是带小数的数字时,如何按每个列表中的第二个元素对列表列表进行排序? [复制]
【发布时间】:2021-03-29 11:49:25
【问题描述】:

例如: 名称和编号在 file.txt 中,如下所示:

Sara 2,873
Mina 152,167
Josh 100,81
Bo  1,13
Leon 12,4

要将文件读入列表列表,我使用了代码:

file_name = open("file.txt", "r")
list_of_lists = []
for line in file_name:
    strip_line = line.strip()                
    line_list = strip_line.split()          
    list_of_lists.append(line_list)        
file_name.close()
print(list_of_lists)

输出:

list_of_lists = [['Sara', '2,873'],['Mina', '152,167'], ['Josh', '100.81'], ['Bo', '1,13'], ['Leon', '12.4']]

我想按浮点数对这个列表进行排序。它应该是这样的:

[['Bo', '1,13'], ['Sara', '2,873'], ['Leon', '12,4'], ['Josh', '100.81'], ['Mina', '152,167']]

我试过这个代码来排序:

def sort_list():
    list_of_lists.sort(key=lambda x: x[1])        
    print(list_of_lists)
sort_list()

但我得到这个按名称排序的输出:

[['Bo', '1,13'], ['Josh', '100.81'], ['Leon', '12.4'], ['Mina', '152,167'], ['Sara', '2,873']]

代码有什么问题?如何按浮点数排序?

【问题讨论】:

  • 那些不是float 对象,那些是字符串。与往常一样,字符串按字典顺序排序。如果要使用float 对象,则必须创建实际的float 对象

标签: python list sorting numbers


【解决方案1】:

为了使这种“排序”工作,您应该确保在排序时使用这些数字作为数字(浮点数)。

def sort_list():
    list_of_lists.sort(key=lambda x: float(x[1]))        
    print(list_of_lists)
sort_list()

首先确保所有这些字符串格式的数字都使用“。”分隔小数。

编辑:

file.txt 应该是这样的:

Sara 2.873
Mina 152.167
Josh 100.81
Bo  1.13
Leon 12.4

这就是整个代码的样子:

file_name = open("file.txt", "r")
list_of_lists = []
for line in file_name:
    strip_line = line.strip()
    line_list = strip_line.split()
    list_of_lists.append(line_list)
file_name.close()
print(list_of_lists)
def sort_list():
    list_of_lists.sort(key=lambda x: float(x[1]))
    print(list_of_lists)
sort_list()

这应该适用于 python 2 和 3(已测试)。

【讨论】:

  • 我尝试将浮点数添加到函数中,但总是收到此错误:TypeError: float() argument must be a string or a number, not 'list'。我该如何解决?
  • 能否请您告诉我您在哪里添加了 float()?
  • 我尝试在第一个代码中将其添加到:list_of_lists.append(float(line_list)),然后像您所做的那样添加到 sort_list 函数,但都不起作用,不确定在哪里添加 float()
  • 我编辑了答案,所以你会在那里找到它的样子。如果您执行 list_of_lists.append(float(line_list)),则您正在尝试将列表转换为浮点数(不可能)。
猜你喜欢
  • 2012-03-08
  • 2016-03-17
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 2021-10-28
  • 2013-07-07
  • 2012-03-13
  • 1970-01-01
相关资源
最近更新 更多