Python组合遍历报错:TypeError: 列表索引需为整数/切片而非元组
解决遍历组合列表时的TypeError问题
错误原因
你在遍历lcomb时犯了一个常见的遍历逻辑错误:
for i in lcomb: a = lcomb[i][0] b = lcomb[i][1]
这里的i并不是列表的索引下标,而是lcomb中的每一个元组元素(比如第一次循环时i的值是(-999, -998))。列表的索引只能是整数或切片,用元组当索引自然会触发TypeError: list indices must be integers or slices, not tuple。
正确的遍历方式
有三种简洁的写法可以解决这个问题:
1. 直接解包元组(推荐)
利用Python的元组解包特性,直接在循环中把元组的元素赋值给变量:
for a, b in lcomb: # 直接使用a和b即可,比如打印 print(a, b)
2. 遍历元组变量并取元素
如果需要保留元组的引用,可以先把元组赋值给变量,再通过下标取元素:
for tup in lcomb: a = tup[0] b = tup[1] # 执行后续操作
3. 同时获取索引和元组(如果需要索引)
如果需要知道当前元素在列表中的位置,可以用enumerate:
for idx, tup in enumerate(lcomb): a = tup[0] b = tup[1] print(f"第{idx}组:{a}, {b}")
额外提示
你的comb函数其实可以简化,因为itertools.combinations本身就返回迭代器,没必要额外封装:
from itertools import combinations lper = [i for i in range(-999, 1000)] lcomb = list(combinations(lper, 2))
内容的提问来源于stack exchange,提问作者Believe82
相关产品推荐
相关产品推荐

