无法将序列乘以'str'类型的非整数(但是它们是str)

时间:2019-08-26 08:28:04

标签: python

请帮助我,我不明白此错误。

我输入了str,但它们不起作用,并且出现错误-无法将序列乘以'str'类型的非整数

import re 
text = 'a3b4c2e13b1'

numbs = re.findall(r'\d\d|\d',text)
letters = re.findall(r'\D',text)

numbs_str = ','.join(numbs)
letters_str = ','.join(letters)

for i in range(len(letters_str)):
    result = letters_str[i] * numbs_str[i]

我需要从数字中得出这样的字母数: a3b4c2e13b1 aaabbbbcceeeeeeeeeeeeeeeb

4 个答案:

答案 0 :(得分:1)

这是使用zipstr.join的一种方法。

例如:

import re
text = 'a3b4c2e13b1'

numbs = re.findall(r'(\d+)',text)
letters = re.findall(r'(\D)',text)

print("".join(k*int(v) for k, v in zip(letters, numbs)))

输出:

aaabbbbcceeeeeeeeeeeeeb

答案 1 :(得分:0)

由于将str乘以str,导致出现此错误。 您需要将多个str转换为int。

因此,您可以像这样更新代码

import re 
text = 'a3b4c2e13b1'

numbs = re.findall(r'\d\d|\d',text)
letters = re.findall(r'\D',text)

numbs_str = map(int, numbs)

result = ""
for le, num in zip(letters, numbs_str):
    result += le * num
print(result)

输出

 aaabbbbcceeeeeeeeeeeeeb

答案 2 :(得分:0)

您可以在加入数字和字母列表的同时删除“,”。还要将数字强制转换为整数。

import re 
text = 'a3b4c2e13b1'

numbs = re.findall(r'\d\d|\d',text)
letters = re.findall(r'\D',text)

numbs_str = ''.join(numbs)
letters_str = ''.join(letters)

result=""
for i in range(len(letters_str)):
    result = result+letters_str[i] * int(numbs_str[i])

print(result)

结果是“ aaabbbbccebbb”

答案 3 :(得分:0)

我看到了解决方案的答案,但让我们仔细考虑一下您想要得到的结果。 可以说正则表达式...没问题,在您的解决方案中,您将创建带有结果的列表(numbs_str和letters_str)。

在您的for循环内,当您在结果中使用range(len())迭代字符串时,您还要尝试复制',',因为它们也是字符串的一部分。 它肯定无法正常工作。无论如何,如果您想重复该单词,请将其乘以整数而不是字符串。

一些非常简单的解决方案,没有地图和邮政编码。如您所见,当我打数字时,我将str转换为整数。处理列表,而不是字符串。

import re
text = 'a3b4c2e13b1'

numbs = re.findall(r'\d+', text)
letters = re.findall(r'\D', text)

numbs_str = ','.join(numbs)
letters_str = ','.join(letters)

# for i in range(len(letters_str)):
#     result = letters_str[i] * numbs_str[i]
#     print(result)

print(numbs)
print(letters)
print(numbs_str)
print(letters_str)

contents = []
for index, letter in enumerate(letters):
    contents.append(letter * int(numbs[index]))

print("".join(contents))

结果:

['3', '4', '2', '13', '1']
['a', 'b', 'c', 'e', 'b']
3,4,2,13,1
a,b,c,e,b
aaabbbbcceeeeeeeeeeeeeb