Python代码运行报错TypeError:'builtin_function_or_method'不可迭代求解
解决Python代码中的TypeError: 'builtin_function_or_method' is not iterable错误
先来看你的代码问题:你遇到的报错是因为变量名大小写混淆+误用内置名称导致的,咱们一步步拆解解决:
错误原因分析
你在代码里定义了大写的ID变量来读取转录本文件,但在循环时却写了for sublist in id:——这里的小写id是Python的内置函数(用来返回对象的内存地址),它不是可迭代的列表/数据框,自然会抛出TypeError。另外你把变量名取成了list,这是Python的内置类型名称,容易引发隐性冲突,最好改掉。
修复后的完整代码
import sys import pandas as pd # 读取表达矩阵和转录本ID文件 matrix = pd.read_table('testGEM.txt') ID = pd.read_table('test_transcripts.txt', header=None) # 把ID转换成一维列表(替换内置名list为transcript_ids,避免冲突) transcript_ids = [] for sublist in ID.values.tolist(): for item in sublist: transcript_ids.append(item) # 转换成tuple(其实直接用列表也可以,isin支持列表类型) id_tuple = tuple(transcript_ids) # 筛选矩阵中匹配的行 filtered_matrix = matrix[matrix.index.isin(id_tuple)] filtered_matrix.to_csv('test10.out', sep='\t')
额外优化提示
你还可以简化ID的转换步骤,不用嵌套循环,直接用numpy的flatten方法快速转成一维列表:
transcript_ids = ID.values.flatten().tolist()
这样修改后,代码就能正常运行,筛选出你需要的行并输出到目标文件了。
内容的提问来源于stack exchange,提问作者Yuqing Hang
相关产品推荐
相关产品推荐

