在 for 循环中使用 list[num] 和 len(list[num]) 有什么区别?

What is the difference between using list[num] and len(list[num]) in a for loop?

作为该项目的一部分,我应该构建一个记忆游戏,其中涉及随机化 16 位数字的列表(两个相同的 range(7) 范围)并将这些数字打印到 canvas 上。我的第一次迭代有一个 for 循环,它选择列表中的每个数字并以设定的间隔 (middle_cell_point) 将其打印到 canvas 上:

def draw(canvas):

    middle_counter = 1

    for num in full_list:

        canvas.draw_text(str(full_list[num]), (((middle_cell_point * middle_counter)) 
                          - (middle_cell_point/2) , HEIGHT/2), 22, "Red")
        middle_counter += 1  

此输出在 canvas 上重复数字,但当我调试代码时,它似乎准确地分配了数字并且似乎没有重复任何数字。当我在 for-loop 中用 "range(len(full_list))" 替换 "full_list" 时程序正常工作:

def draw(canvas):

    middle_counter = 1

    for num in range(len(full_list)):

        canvas.draw_text(str(full_list[num]), (((middle_cell_point * middle_counter)) 
                              - (middle_cell_point/2) , HEIGHT/2), 22, "Red")
        middle_counter += 1  

有人可以向我解释为什么第二次迭代有效而第一次迭代无效吗?

非常感谢!

区别在于 for num in full_list 列出项目而 for num in range(len(full_list)) 列出索引。

举例说明:

>>> full_list = ['a', 'b', 'c']
>>> list(full_list)
['a', 'b', 'c']
>>> list(range(len(full_list)))
[0, 1, 2]

在你的情况下你想使用 num 而不是 full_list[num]:

def draw(canvas):

    middle_counter = 1

    for num in full_list:

        canvas.draw_text(str(num), (((middle_cell_point * middle_counter)) 
                                    - (middle_cell_point/2) , HEIGHT/2), 22, "Red")
        middle_counter += 1  

第一个遍历初始向量si resulta的值不正确。 如果从 1 到最大长度 si 值的向量正确

,则第二个遍历索引