Skip to main content
 首页 » 编程设计

Python:索引列表列表的问题

2025年05月04日11EasonJim

我有这个列表列表:

mylist=[[1, 2, 4, 8], [16, 32, 64, 128], [256, 512, 1024, 2048]]

现在我想创建一个字典,为每个键分配列表中相应索引的值。

在这种情况下:correct_dict={0:1,1:2,2:4,3:8,4:16,...,11:2048}。

我打算用以下函数来做:

def dictionarize3(array): 
                dict3={} 
                count_var=0 
                for i in range(len(array[0]) - 1) : 
                    for j in range(len(array[0]) - 1): 
                        dict3[count_var]=array[i][j] 
                        count_var=count_var+1 
                return dict3 
 
dict=dictionarize3(mylist) 

但这就是我得到的: wrong_dict={0: 1, 1: 2, 2: 4, 3: 16, 4: 32, 5: 64, 6: 256, 7: 512, 8: 1024}.

因此,len(correct_dict)=12,而 len(wrong_dict)=9。

问题是什么让我错过了列表中位于第三列的所有值?

请您参考如下方法:

这是 itertools.chain 的工作

from itertools import chain 
 
mylist=[[1, 2, 4, 8], [16, 32, 64, 128], [256, 512, 1024, 2048]] 
 
mydict = {i:v for i,v in enumerate(chain(*mylist))} 
 
print(mydict) 

输出:

{0: 1, 1: 2, 2: 4, 3: 8, 4: 16, 5: 32, 6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048} 

Question: What makes me miss all the values that in the list are located in the third column?

range(len(array[0]) - 1) 

是在其参数之前以 1 结尾的范围;因此,在您的情况下,一个在 4 - 1 = 3 之前,因此在索引 2 处,它会跳过内部索引为 3 的最后一个元素。

编辑 还有那个外循环

for i in range(len(array[0]) - 1) : 

似乎起作用只是巧合,因为外部列表的长度为 3。 你需要的是这个:

for i in range(len(array)): 

你的“i”是针对整个外部数组,而不是它的第一个内部元素! :)