You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用存储在列表中的列表名执行列表操作?——查找元素首次出现索引时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 07:44:05