Python列表,范围

时间:2018-06-07 16:02:35

标签: python

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)

3 个答案:

答案 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')]