繁体   English   中英

将字符串列表转换为整数

[英]Converting a list of strings into integers

首先,我搜索并找到了其他看起来很合理并且应该可以使用的解决方案,但是在尝试使用我的数据后由于任何原因,这些解决方案都行不通。 我正在使用python 2.7.6

我正在尝试将字符串列表转换为整数,以便可以添加它们。

#!/usr/bin/env python
import re
numlist = list()
total = 0
#open the file
f = open('c:/Users/Home/Documents/homework/python_webdata/regex_sum_21441.txt', 'r')

for line in f:
    line = line.rstrip()
    z= re.findall('[0-9]+', line)
    if z != []:
    numlist.append(z)


print numlist

#attempting to add up the int's from the list (which doesnt work) 
results = [int(i) for i in numlist]

total = sum(results)

我的数据正确打印,在尝试将其转换为int之前看起来像这样

[['2261'], ['2504', '4529'], ['3698', '2693', '3291'], ['3556', '9753', '4059'], ['113', '8261', '157'], ['8059', '1055'], ['1060'], ['2412', '1860'], ['3589'], ['3319'], ['475'], ['6802',

但我收到以下错误:

追溯(最近一次通话最近):文件“ C:\\ Users \\ Home \\ Documents \\ homework \\ python_webdata \\ lesson 2 code.py”,第20行,结果= [int(i)for numlist中的i] TypeError:int( )参数必须是字符串或数字,而不是'list'

适当地添加注释之一,由于使用了“ append”,因此您具有包含整数的列表的列表。

numlist.extend(z)

代替

numlist.append(z)

显然,这里的问题是z= re.findall('[0-9]+', line)因为这将返回一个字符串列表,现在,在numlist.append(z) ,您要追加整个z列表到numlist ,这就是为什么要获取字符串列表的原因。

现在,

results = [int(i) for i in numlist]不能像您在numlist字符串列表中那样工作,并且int(i)无法将列表转换为整数,您仍然必须将其展平,所以,我认为您最好的选择是numlist.extend(z)以仅使numlist与字符串保持平坦(而不是列表的列表)。

另一个解决方案是通过这种方式展平您的numlist

results = [int(item) for lst in numlist for item in lst]

注意:为了改进您的代码并坚持最佳实践,最好将with open(file, mode) as f:这样可以确保关闭文件时无需显式提及f.close() ,方法如下:

with open('c:/Users/Home/Documents/homework/python_webdata/regex_sum_21441.txt', 'r') as f:
    for line in f:
        line = line.rstrip()
        z= re.findall('[0-9]+', line)
        if z != []:
            numlist.extend(z)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM