我有 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 个小时,快要疯了。
答案 0 :(得分:2)
lista
的索引来自 0:4
,而 listb
的索引来自 0:2
。因此,3
和 4
是最初定义的 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)
变化:
希望这有帮助,但真的,下次尝试调试而不是谷歌搜索:)