如何返回列表中数字总和的排序列表?

时间:2019-03-06 22:26:54

标签: python list sorting

我有一个清单

numbers = [869, 1069, 1108, 1343, 389]

我想按数字总和的升序(例如869的8 + 6 + 9)

我的输入:

def s_num(nums):
    result = [sum(int(digit) for digit in str(number)) for number in numbers]
    return result

s_num = sorted(numbers,key=s_num)
print(s_num)

但是,由于某种原因,我的输出与初始列表相同

print(s_num)
[869, 1069, 1108, 1343, 389]

如何更改脚本以获取正确的排序列表?

5 个答案:

答案 0 :(得分:3)

您可以将字符串转换后的数字的数字字符映射为整数,以便将它们传递给sum函数:

def s_num(n):
    return sum(map(int, str(n)))

进行此更改后,sorted(numbers, key=s_num)将返回:

[1108, 1343, 1069, 389, 869]

答案 1 :(得分:3)

键函数应带有一个参数,并返回一个用于排序目的的值。您不应迭代该函数中的numbers数组。这样做:

numbers = [869, 1069, 1108, 1343, 389]
def s_num(num):
    return sum(map(int, str(num)))

result = sorted(numbers,key=s_num)
print(result)

输出

[1108, 1343, 1069, 389, 869]

答案 2 :(得分:1)

我认为您错过了正确使用public void bil() { SqlConnection con = new SqlConnection(); con.ConnectionString = (@"Server=DESKTOP-8JJO9NL\SQLEXPRESS;Database=HMS;Trusted_Connection=True"); con.Open(); string sqlquery = "select DATEDIFF(day,arrivaldate,departure) AS TotalDays=@tdays ,(DATEDIFF(day,arrivaldate,departure) * 10) AS CalculatedAmount=@amount from Roomsdata where room#=@roomnum2"; SqlCommand command = new SqlCommand(sqlquery, con); SqlDataReader sReader; command.Parameters.Clear(); command.Parameters.AddWithValue("@roomnum2", Roomnum); sReader = command.ExecuteReader(); while (sReader.Read()) { Tdays = sReader["TotalDays"].ToString(); Amount = sReader["CalculatedAmount"].ToString(); } con.Close(); 函数参数的机会。此外,已排序的函数已经在s_num(nums)列表的各个元素上循环,因此在numbers函数中不需要嵌套循环。

s_num(nums)

答案 3 :(得分:1)

您可以使用key参数在一行中完成

sorted(numbers,key=lambda x:(sum(map(int,str(x)))))

输出

[1108, 1343, 1069, 389, 869]

答案 4 :(得分:1)

您的s_sum(nums)函数将忽略其接收的参数(nums),并为numbers变量的所有项计算位数之和。这将始终是相同的结果,因此您的列表未排序。

您可以将其更改为:ncdu或使用此处发布的建议答案之一。