我有一个字符串列表,我希望将其转换为int,或者从头开始使用int。
任务是从文本中提取数字(并得到总和)。我做的是这个:
for line in handle:
line = line.rstrip()
z = re.findall("\d+",line)
if len(z)>0:
lst.append(z)
print (z)
这给了我一个像[['5382', '1399', '3534'], ['1908', '8123', '2857']
这样的列表。我尝试了map(int,...
和另外一件事,但我得到的错误如下:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
答案 0 :(得分:7)
您可以使用列表理解:
>>> [[int(x) for x in sublist] for sublist in lst]
[[5382, 1399, 3534], [1908, 8123, 2857]]
或地图
>>> [map(int, sublist) for sublist in lst]
[[5382, 1399, 3534], [1908, 8123, 2857]]
或只是改变你的行
lst.append(z)
到
lst.append(map(int, z))
您的地图无效的原因是您尝试将int
应用于列表列表的每个列表,而不是每个子列表的每个元素。
更新:
在Python3中,map
将返回一个地图对象,您必须手动将其转换回列表,即list(map(int, z))
而不是map(int, z)
。
答案 1 :(得分:1)
您可以阅读整个输入并使用正则表达式:
import sys
import re
numbers = map(int, re.findall(r'\d+', sys.stdin.read()))
print numbers, sum(numbers)
输入
11 22
33
输出
[11, 22, 33] 66