我一直在尝试解决一个要求返回标题问题的函数的问题。输出的一个示例为以下示例:
sum_of_digits_sorted([56, 2131])
返回
[2131, 56]
由于2+1+3+1
<比5+6
小,因此新列表将按照示例中的顺序进行排序。
我使用了在列表上进行迭代的代码,并且还编码了一种对数字求和的方式,但是我不知道如何将它们一起应用
PD:我是这个网站的新手,所以我不知道如何附加程序和这些东西。谢谢!
答案 0 :(得分:0)
您可以尝试以下方法:
In [553]: l
Out[553]: [56, 2131]
In [554]: new = [] # define an empty list
In [555]: for c,i in enumerate(l):
...: if c < len(l)-1:
...: lst = map(int, str(l[c])) # converts individual element into a list
...: lst1 = map(int, str(l[c+1]))
...: if sum(lst) > sum(lst1): # sum(lst) gives the sum of the list
...: new.append(l[c+1])
...: new.append(l[c])
...: else:
...: new.append(l[c])
...: new.append(l[c+1])
...:
...:
In [556]: new # will be a sorted list based on the sum of digits of individual elements.
Out[556]: [2131, 56]
答案 1 :(得分:0)
这仅是为了演示该想法,它将为每次比较计算总和,这对于较大的列表而言不是十分有效:
def sum_of_digits_sorted(a):
return sorted(a,key=lambda x: sum([int(i) for i in str(x)]))
>>> sum_of_digits_sorted([1, 2131, 56, 99])
[1, 2131, 56, 99]
这与带有预先计算的键的临时元组的想法相同:
list(map(lambda y:y[1],sorted([(sum([int(i) for i in str(x)]),x) for x in a],key=lambda x: x[0])))
有几种计算小数点总和的方法的比较,当我将上述方法与Sum the digits of a number - python中最快的方法进行比较时,该方法要慢30%左右,除非您计算出一个大量的款项。即使该答案的速度慢了3倍。对于一次性脚本,可能会做任何事情。对于速度更关键的事情,我会选择最快的速度-可能会在可比较的硬件和python版本上进行测试。
答案 2 :(得分:0)
您可以使用算法通过:close
和生成器表达式来计算整数的数字根。然后将其用作排序键:
sum