如何利用存储在列表中的列表名执行列表操作?——查找元素首次出现索引时TypeError报错排查
问题分析与解决
你的问题出在把列表的名称以字符串形式存储,而非直接存储列表对象本身。让我拆解一下:
错误原因
你这段代码生成的s_list是['D1', 'D2', 'D3']——里面全是字符串,不是你定义的D1、D2、D3列表对象。当你执行i.index(elem)时,i是字符串(比如'D1'),而elem是整数2,字符串的index()方法只能查找字符串类型的子串,自然会抛出TypeError: must be str, not int的错误。
修正方案
直接把列表对象存入s_list即可,不需要通过字符串拼接的方式:
# 先定义你的原始列表 D1 = [1,2,3,4,5] D2 = [2,7,6,5,4] D3 = [1,2,6,8,7] # 直接存储列表对象,而非字符串名称 s_list = [D1, D2, D3] elem = 2 index_pos = [] for lst in s_list: # 现在lst是真正的列表对象,可以正常调用index() k = lst.index(elem) index_pos.append(k) print(index_pos) # 输出: [1, 0, 1]
额外说明
如果你因为某些特殊场景必须通过字符串名称获取变量(不推荐,代码可读性差),可以使用globals()或locals()函数获取全局/局部变量字典,比如:
s_list = ['D1', 'D2', 'D3'] elem = 2 index_pos = [] for name in s_list: # 通过变量名字符串获取对应的列表对象 lst = globals()[name] k = lst.index(elem) index_pos.append(k) print(index_pos) # 同样输出: [1, 0, 1]
但这种方式容易引入潜在问题(比如变量名拼写错误、意外覆盖等),所以优先推荐直接存储列表对象的方案。
内容的提问来源于stack exchange,提问作者sumitpal0593
相关产品推荐
相关产品推荐

