【问题标题】:Can you tell me the difference of using list with index and without index?你能告诉我使用带索引和不带索引的列表的区别吗?
【发布时间】:2026-02-10 16:45:02
【问题描述】:

告诉我你使用带索引的列表和不带索引的列表的区别和好处?

li=[1,2,'ayush',9,10,11,'yaman']

for i in range(len(li)):
    print(li[i])

for ele in li:
    print(ele)

【问题讨论】:

  • 差异:无。使用索引形式的好处:无。
  • 两者中哪一个涉及的打字较少?
  • 有范围的循环类似于java中的普通for循环,没有范围的循环是java中的foreach循环
  • 在 Python 手册中查找 enumerate 以结合使用两者,
  • 使用索引看起来更复杂也更慢。

标签: python arrays list loops


【解决方案1】:

除了提到的事实之外,如果您不迭代列表,而是使用索引,您可以动态修改它,直接迭代列表时有轻微的速度优势。

这是因为,如果使用 range(),Python 会构造一个新的迭代器,或者在 Python 2.x 的情况下,会构造另一个列表,这需要额外的时间。然后,在每次循环迭代中,您一次又一次地访问一个新索引。 Python 列表中的随机访问非常快,但是,如果您直接在列表上进行迭代,Python 会使您成为列表本身的迭代器,它将 next() 元素的值分配给 for 循环中指定的变量,这一切都发生在C级,所以速度要快得多。您所要做的就是访问 loops 变量,这比访问列表的索引元素要快一点。这是因为对列表元素的随机访问将在 Python 中执行,而在 C 级别则更好。

因此,如果您不需要更改任何内容,而只需要访问元素,请遍历列表。如果您正在进行就地更改,请使用索引。 如果你需要两者,例如,你需要跳过一些元素或其他东西,最好的方法是:

new_list = []
x = 0
for element in the_list:
    if x%2==0:
        new_list.append(element)
    x += 1

当然,这只是一个愚蠢的例子。在 Python 中有更好更快的方法来执行上述循环所做的任务。有些人可能会争辩说,我本可以在上面的示例中使用 enumerate(),但我发现这种方式更简洁、更快。

【讨论】:

    【解决方案2】:

    不同之处在于,在第一种情况下,您可以修改原始列表,而在第二种情况下,您不能:

    li=[1,2,'ayush',9,10,11,'yaman']
    
    for ele in li:
        ele = 1
    print(li)
    
    for i in range(len(li)):
        li[i] = 1
    print(li)
    

    产量

    [1, 2, 'ayush', 9, 10, 11, 'yaman']
    [1, 1, 1, 1, 1, 1, 1]
    

    我建议你阅读 Python lists

    【讨论】: