我试图在两个嵌套的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值赋给new_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
你能建议任何解决方案来分配(或替换)列表元素值在循环使用索引?
问题在于您初始化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
也是一样