繁体   English   中英

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

[英]How do I return a sorted list of the sum of numbers in a list?

我有一个清单

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]

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

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

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

通过此更改, sorted(numbers, key=s_num)将返回:

[1108, 1343, 1069, 389, 869]

key 函数应该接受一个参数并返回一个值以用于排序目的。 您不应迭代该函数中的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]

我认为您错过了正确使用s_num(nums)函数参数的机会。 此外, sorted 函数已经遍历了numbers列表的各个元素,因此您不需要s_num(nums)函数中的嵌套循环。

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

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

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

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

输出

[1108, 1343, 1069, 389, 869]

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

您可以将其更改为: result = sum(int(digit) for digit in str(nums))或使用此处发布的建议答案之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM