2017-05-07 97 views
0

所以,這是我的問題。根據條件,我試圖去查看嵌套列表並刪除一些元素。問題是,當一個元素被刪除,這將改變列表的長度,反過來,創建錯誤:刪除for循環中的列表元素

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部分。我想我可以理解這個問題,問題在於名單的長度正在發生變化,因此,職位也發生了變化。有誰知道一個簡單的方法來克服這個問題?

回答

0

你需要的東西就像一個

continue;

break;

聲明(例如在Java的),將停止你的循環,並防止它太遠計數。

所以你只能刪除每個內部循環中的一個元素。休息後;或繼續;如果需要的話,可以用新的列表長度重新遍歷列表以刪除第二個,第三個..元素。