我试图在两个嵌套for循环中的列表中分配(或替换)项目。下面是代码(base_list已经定义,所以代码可能看起来不完整):
list_init = 'test'
# converting new list to type list
new_list = list(list_init)
flag = [0]
for i in range(len(base_list)):
for j in range(i, len(base_list)):
if base_list[i] == base_list[j]:
print(base_list[j],' is equals to', base_list[i])
# below is the error line
new_list[j] = base_list[j]
flag[j] = 1
else:
print(base_list[j],' is not equals to', base_list[i])
# below is the error line
new_list[j] = base_list[j]
flag[j] = 0
我正在做的是迭代相同的列表(base_list)两次以将列表中的每个元素与该元素之后的每个其他元素进行比较,并且每当找到匹配时,我将为每个元素分配第一个base_list值比赛。当找不到匹配时,我将当前的base_list值分配给新列表。因此我采取第二个循环:
for j in range(i, len(base_list))
这是为了确保第二个循环从第一个循环中激活的列表项开始,并且不从头开始迭代。
现在问题出在以下几行:
new_list[j] = base_list[j]
我收到以下错误:
new_pl[j] = pl_list[i]
IndexError: list assignment index out of range
我在国旗名单中面临同样的问题:
flag[j] = 1
您能否建议使用索引在循环中分配(或替换)列表元素值的任何解决方案?
答案 0 :(得分:2)
问题在于您在此行中初始化new_list
的方式:
new_list = list(list_init)
您的list_init
设置为'test'
,因此当您创建new_list
时,它看起来像
['t', 'e', 's', 't']
然后,如果base_list
的长度是> 4,您尝试在索引5处为new_list
分配元素,并获取IndexError
。
您应该像这样创建new_list
:
new_list = [None] * len(base_list)
通过这种方式,您可以确保new_list
的长度与base_list
相同,并且您不会获得任何IndexErrors
。 flag
也是如此。