我一直在经历一些代码挑战。一个人特别震惊我。 CodeAbbey具有加权数字和数字挑战。这是我的答案。
# open and read a file, hardcoded numbers, etc. Here is a sample
raw_data = (6, 19, 64, 6527226, 12345146)
for number in raw_data:
wsd = 0 # Stores sum
number_list = list(str(number)) # Converts the number into a list.
for i, k in enumerate(number_list): # Enumerates each number
wsd += (int(i+1) * int(k)) # Multiplies and adds product to wsd
print(wsd)
output >>> 6, 19, 14, 114, 137
任何有经验的人都能看到更好的方法来获得总和吗?
答案 0 :(得分:3)
如果使用map:
>>> map(lambda d: sum([ (i+1) * int(v) for i,v in enumerate(list(str(d)))]), raw_data)
[6, 19, 14, 114, 137]
答案 1 :(得分:2)
for number in raw_data:
print(sum(i * int(d) for i, d in enumerate(str(number), 1)))
答案 2 :(得分:2)
这可以完全使用数学运算来完成。看看如何生成总和,例如对于12345146:
6
4+6
1+4+6
5+1+4+6
4+5+1+4+6
3+4+5+1+4+6
2+3+4+5+1+4+6
+ 1+2+3+4+5+1+4+6
所以你先添加最后一位数字,然后是最后一位,然后是最后一位,然后是最后一位,上一位和上一位等,直到你添加所有数字这可以通过以下算法简单地实现:
raw_data = (6, 19, 64, 6527226, 12345146)
for d in raw_data:
wsd = 0
lst = 0 # this is for holding last 'sum row'
while d > 0:
lst = lst + d % 10 # append another digit
wsd += lst
d //= 10
#
print wsd
#
在我的计算机上,这比使用枚举和字符串转换的算法快两倍(我将raw_data乘以100000次,因此需要500000个元素进行比较)。