Python If 语句在 for 循环中 - 列出索引超出范围

时间:2021-07-23 14:21:45

标签: python python-3.x list

我有 2 个列表。 List A 和 List B。List B 中的值也在 List A 中,但 List A 中的值并不都在 List B 中。所以 List A 更长。

我想检查列表 A 中的值是否在列表 B 中,如果没有,则将其插入到列表 A 的索引处。

所以在循环之后我想有 2 个相同的列表。

我知道仅此一项并没有多大意义,但我也想在这个循环中做不同的事情,为了简化起见,我没有在这里包括。

lista = ["apple", "banana", "pinapple", "kiwi", "orange"]
listb = ["apple", "pinapple", "kiwi"]

for i in range(len(lista)):
    if(lista[i] != listb[i]):
        listb.insert(i, lista[i])

print(listb)

当我运行这个时,我得到错误:

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    if(lista[i] != listb[i]):
IndexError: list index out of range

为什么我在这里是个白痴?我在谷歌上搜索了过去 2 个小时,快要疯了。

3 个答案:

答案 0 :(得分:2)

lista 的索引来自 0:4,而 listb 的索引来自 0:2。因此,34 是最初定义的 listb 的无效索引,尽管这会在插入过程中发生变化。

# Demonstration of indices
lista = ["apple", "banana", "pinapple", "kiwi", "orange"]
listb = ["apple", "pinapple", "kiwi"]

for i in range(len(lista)):
    print(i)
    try:
        print(f'element {i} of list a = {lista[i]}')
    except: 
        print(f'{i} is an invalid index for list a')
    try:
        print(f'element {i} of list b = {listb[i]}')
    except:
        print(f'{i} is an invalid index for list b')

结果:

element 0 of list a = apple
element 0 of list b = apple
element 1 of list a = banana
element 1 of list b = pinapple
element 2 of list a = pinapple
element 2 of list b = kiwi
element 3 of list a = kiwi
3 is an invalid index for list b
element 4 of list a = orange
4 is an invalid index for list b

您的任务的一种潜在解决方案,假设您有理由需要比较和插入值:

for i, v in enumerate(lista):
    if v not in listb:
        listb.insert(i, v)

print(lista)
print(listb)
['apple', 'banana', 'pinapple', 'kiwi', 'orange']
['apple', 'banana', 'pinapple', 'kiwi', 'orange']

答案 1 :(得分:0)

您有两个不同大小的列表。第一个 (lista) 的长度为 5,表示其中有 5 个元素。第二个 (listb) 的长度为 3。 for 循环中的 i 变量将遍历 range(len(lista)) 函数返回的所有值,这实际上是 [0, 1, 2, 3, 4] .由于您的第二个列表的长度仅为 3,这意味着当要求索引大于 2 的元素时,它会引发错误。

答案 2 :(得分:0)

lista = ["apple", "banana", "pinapple", "kiwi", "orange"]
listb = ["apple", "pinapple", "kiwi"]

for item in lista:
    if item not in listb:
        listb.insert(lista.index(item),item)

print(listb)

变化:

  • len() 函数使用不当,因为您不是迭代长度,而是索引,现在脚本迭代 lista 中的每个项目
  • 检查 item 是否在 listb 中,如果不是,则在该 item 的 lista 索引处插入 item
  • 就是这样!

希望这有帮助,但真的,下次尝试调试而不是谷歌搜索:)