解决TypeError:int()参数不能为list类型的Python代码修正问题
解决TypeError: int()参数类型错误的问题
问题背景
需要实现功能:传入文件名和列名列表,返回所有行中这些列的整数值组成的列表(整数顺序无关)。当前代码中指定行触发错误:
def extract_data(filename, column_names): with open(filename) as election: elects = [row for row in csv.DictReader(election)] results = ([row[cn].replace(",", "") for cn in column_names] for row in elects) results = [row for row in results if '' not in row] return list((results)) def extract_election_votes(filename, column_names): results = extract_data(filename, column_names) # 以下行触发错误 return [int(vote) for vote in results]
报错信息:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
问题分析
extract_data函数返回的是二维列表:外层列表的每个元素对应一行数据,是包含多个列字符串值的子列表。原代码直接遍历外层列表,把每个子列表(而非子列表里的字符串)传给int(),导致类型不匹配错误。
解决方案
根据需求(返回所有行中这些列的整数值组成的一维列表,顺序无关),需要嵌套遍历二维列表的每个元素,将其转为整数后合并,修改触发错误的行如下:
return [int(vote) for row in results for vote in row]
如果需要保留每行的结构(返回二维整数列表,每个子列表对应一行的列整数),则修改为:
return [[int(vote) for vote in row] for row in results]
完整修正代码
注意:原代码缺少csv模块导入,需要补上:
import csv def extract_data(filename, column_names): with open(filename) as election: elects = [row for row in csv.DictReader(election)] results = ([row[cn].replace(",", "") for cn in column_names] for row in elects) results = [row for row in results if '' not in row] return results # 简化list(results),因为results已经是列表类型 def extract_election_votes(filename, column_names): results = extract_data(filename, column_names) return [int(vote) for row in results for vote in row]
内容的提问来源于stack exchange,提问作者user19563024
相关产品推荐
相关产品推荐

