[英]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.