我有一个很长的代码,例如545362783
,并且希望将组成数相加并相乘,例如(1*5)+(2*4)+(3*5)+(4*3)+(5*6)
等。
有没有简单的解决方案将它们作为整数获取,所以我可以在数学中使用它们。 非常感谢!
答案 0 :(得分:2)
一种实现方式:
s = '545362783'
a = sum(x * int(c) for x, c in zip(range(1, len(s) + 1), s))
print(a)
# 222
正在发生的事情如下:
s
只是一个字符串,因此循环遍历将赋予每个字符range(1, len(s) + 1)
将给出从1
到s
长度的整数zip()
对其参数进行分组,以便1
循环同时产生'5'
和for
(等等)c
被转换为int
sum()
enumerate()
可以做得更有效(充分利用start
参数similarly to what is done in @shahaf's answer):
a = sum(x * int(c) for x, c in enumerate(s, 1))
这与上面的基本相同,但更加优雅(可能也更快)。 enumerate()
的行为只是为了产生一个索引,伴随着被循环通过的对象。
答案 1 :(得分:1)
尝试拆包
s = '545362783'
# --> to map each character of the string to a list:
print([*s])
['5', '4', '5', '3', '6', '2', '7', '8', '3']
# --> to map each character of the string directly to a list of integers:
# (thanks Mykola Zotko for the comment!)
print(list(map(int, s)))
[5, 4, 5, 3, 6, 2, 7, 8, 3]
有关开箱操作员的更多信息*参见例如here。
答案 2 :(得分:1)
您可以编写一个相当简单的方法来做到这一点,就像这样
num_str = "545362783"
total = 0;
for idx, num in enumerate(num_str, 1):
total += idx * int(num)
答案 3 :(得分:0)
这是解决方案。希望对您有帮助:
a = list(str(545362783))
count = 1
c = []
for i in a:
b = count * int(i)
c.append(b)
count = count + 1
sum_of_a = sum(c)
print(sum_of_a)
输出:
222
答案 4 :(得分:0)
def count_substring(string):
string = '545362783'
multi = []
for i in range(0, len(string)):
multiplied = int(i+1) * int(string[i])
multi.append(multiplied)
print (multi)
print (sum(multi))
您可以尝试这个。
输出:
[5、8、15、12、30、12、49、64、27]
222