0

所以,这是我的问题。我正在尝试根据条件遍历嵌套列表并删除一些元素。问题是,每当删除一个元素时,这会改变列表的长度,这反过来又会产生错误:

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]

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

4

1 回答 1

0

你需要类似的东西

继续;

或者

休息;

语句(例如在 Java 中),它将停止您的循环并防止它计得太远。

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

于 2017-05-07T13:58:02.837 回答