List 删除for循环中的列表元素

List 删除for循环中的列表元素,list,index-error,List,Index Error,所以,这是我的问题。我试图根据一个条件遍历一个嵌套列表并删除一些元素。问题在于,无论何时删除一个元素,都会更改列表的长度,从而产生错误: IndexError: list index out of range 这是我的代码: a = [[[1] * 2 for i in range(n)] for j in range(p)] for y in range(p): for x in range(n): if len(a[y]) > 1:

所以,这是我的问题。我试图根据一个条件遍历一个嵌套列表并删除一些元素。问题在于,无论何时删除一个元素,都会更改列表的长度,从而产生错误:

IndexError: list index out of range
这是我的代码:

a = [[[1] * 2 for i in range(n)] for j in range(p)]
     for y in range(p):
        for x in range(n):
            if len(a[y]) > 1:
                if a[y][x][1] == 1:
                    if random.random() < s:
                        del a[y][x]
a=[[1]*2表示范围(n)中的i]表示范围(p)中的j]
对于范围(p)内的y:
对于范围(n)内的x:
如果len(a[y])>1:
如果a[y][x][1]==1:
如果random.random()

s只是一个介于0和1之间的数字。因为我想确保每个列表至少有一个值,所以我把if len(a[y])>1部分放在这里。我想我能理解这个问题,问题是名单的长度在变化,因此,立场也在变化。有人知道克服这个问题的简单方法吗?

你需要像

继续

中断

语句,它将停止循环并防止循环计数过多

因此,在每个内部循环中只能删除一个元素。休息后;或继续;您可以使用新的列表长度再次遍历列表,以删除第二个、第三个。。元素(如果必要)