从字符串中提取单个数字(python)

时间:2019-10-08 09:56:23

标签: python-3.x

我有一个很长的代码,例如545362783,并且希望将组成数相加并相乘,例如(1*5)+(2*4)+(3*5)+(4*3)+(5*6)等。

有没有简单的解决方案将它们作为整数获取,所以我可以在数学中使用它们。 非常感谢!

5 个答案:

答案 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)将给出从1s长度的整数
  • 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