使用list.pop()触发TypeError:列表对象无法转为整数的问题排查
问题分析与解决
错误原因
list.pop()方法必须接收整数类型的索引值作为参数,但你传入的x是列表中的元素(从pandas读取后,每个x实际是包含单个单词的子列表,比如['apple']),并非整数,因此触发TypeError。
除此之外,你的代码还有两个隐藏问题:
- 遍历列表的同时直接修改列表(调用
pop)会打乱遍历逻辑,导致部分元素被跳过,无法完成完整过滤。 - 从pandas读取的
values.tolist(),如果words.csv是单列存储单词,每个x是长度为1的子列表,len(x)得到的结果是1,永远不等于5,这会导致你错误地尝试移除所有元素。
正确实现方式
方式一:用Pandas直接过滤(更高效)
import pandas as pd # 读取CSV文件,若文件无列名,添加header=None参数 df = pd.read_csv('words.csv') # 过滤出长度为5的单词,转换为列表 filtered_words = df[df.iloc[:, 0].str.len() == 5].iloc[:, 0].tolist()
方式二:用列表推导式处理
import pandas as pd # 先把读取到的嵌套列表转为一维单词列表 word_list = [item[0] for item in pd.read_csv('words.csv').values.tolist()] # 筛选长度为5的单词 filtered_words = [word for word in word_list if len(word) == 5]
内容的提问来源于stack exchange,提问作者Jayan Paliwal
相关产品推荐
相关产品推荐

