检查二维列表元素索引时返回错误值的问题排查
问题分析与解决
错误原因
你代码里的 table1.index(element) 是问题根源。这个方法会返回列表中第一个与element匹配的元素的索引,而你的table1里第1行(索引1)和第3行(索引3)的子列表内容完全相同:[' B ', ' - ', ' C ']。所以当遍历到第3行时,index()找到的是第一个匹配的行索引1,而非正确的3。
修复方案
改用 enumerate() 遍历二维列表,它能同时获取行索引和行内容,彻底解决这个问题:
table1=[[ ' - ', ' B ', ' C ',], [ ' B ', ' - ', ' C '], [ ' B ', ' B ', ' C '], [ ' B ', ' - ', ' C ']] for row_idx, row in enumerate(table1): for col_idx, val in enumerate(row): if val == " B ": print(row_idx, col_idx)
运行后会得到正确输出:
0 1 1 0 2 0 2 1 3 0
(注:你预期输出里漏写了第2行第0列的B,这段代码会输出所有" B "的位置)
如果你不想用enumerate(),也可以直接遍历行索引:
for row_idx in range(len(table1)): row = table1[row_idx] for col_idx in range(len(row)): if row[col_idx] == " B ": print(row_idx, col_idx)
效果和上面一致,只是写法更繁琐。
内容的提问来源于stack exchange,提问作者boran çakıl
相关产品推荐
相关产品推荐

