import itertools
Numb = 'abxxxc'
L=list(itertools.permutations(list(Numb)))
L=[''.join(str(i) for i in x) for x in L]
K=L[::]
for i in range(len(L)):
if K[i][-1] == 'x':
del K[i]
print(L)
我有这样的代码,当我运行它时,它给了我一个错误。
if K[i][-1]=='x':
IndexError: list index out of range
我不明白为什么。我尝试了一切,但它仍然给了我错误。有人请帮助我看看我的错误在哪里?
编辑:
L=list(itertools.permutations(list(Numb)))
L=[''.join(str(i) for i in x) for x in L]
for i in range(len(L)):
if L[i][5] == 'x':
del L[i]
print(L)
答案 0 :(得分:2)
L长720个元素。
files/download/
对应for i in range(len(L))
你删除K中的元素,所以在某个时刻,K长432个元素,我是432
(你试图获取一个432长的列表中的第433个元素)
也许这应该可以胜任?
for i in range(720)
您通常应该尽量避免使用del。最好构造一个包含所需元素的新列表。
答案 1 :(得分:2)
在迭代列表时删除元素是一种不好的做法。 更好的版本将是:
K = [element for element in K if element[-1] != 'x']
答案 2 :(得分:2)
当您正在迭代它时,您正在从列表中删除元素,因此您将有一个点可以重新引用不再存在的索引。
您可以使用 list comprehension 解决此问题:
mylist = [K[x] for x in range(len(L)) if (K[x][-1] != 'x')]