将字符串列表转换为整数

4

我有一个字符串列表,我想将它们转换为整数,或者从一开始就是整数。

任务是从文本中提取数字(并获得总和)。我所做的是这样的:

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'
2个回答

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用户的更新: 在Python3中,map会返回一个映射对象,你需要手动将其转换回列表,即list(map(int, z))而不是map(int, z)

谢谢,这解释了很多 :) 但是,当我使用map进行附加时,输出中得到的只有[<map object at 0x02EADCD0>等等。你有任何想法如何将输出放入单个列表或合并列表,以便我可以使用所有数字吗?谢谢! - erocoar
1
@erocoar 啊,那是因为你正在使用Python3。在Python3中,map将返回一个映射对象,你必须手动将其转换回列表,即list(map(int, z))而不是map(int, z) - timgeb

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

谢谢,您能告诉我r'\d+'前面的r是什么意思,以及如何使用sys.stdin.read()吗?我不知道这个命令怎么用,更不用说如何用它打开我的txt文件了。谢谢 :) - erocoar
这是一种简化编写正则表达式的方法。使用 r,例如,您可以说反斜杠不需要转义。因此,我们可以只写 r'\d+',而不是写'\d+'。 - JuniorCompressor
@JuniorCompressor '\d+' 不需要添加 r 前缀也可以正常工作,因为没有 \d 转义序列。'\\d' == '\d'True。当你的正则表达式中包含 '\n''\t' 等内容时,r 前缀会很有帮助。 - timgeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接