2011-11-17 55 views
2

列表signals_by_date存儲元組,每個元組包含15個數字。對於signals_by_date中的每個元組,我想刪除不符合特定條件的數字。出於某種原因,無論我在列表理解中施加什麼限制,我總是在每個元組中留下7個數字。在下面的代碼示例中,所有數字都小於3,所以我希望每個元組都是空的。我究竟做錯了什麼?非常感謝。Python list comprehension和list.remove()

signals_by_date = [] 
    for i in range(0, 1): 
     temp_signals = [] 
     for symbol in symbols:   
      for signal in signals_by_symbol[symbol]: 
      temp_signals.append(signal[i]-1) 
     signals_by_date.append(temp_signals) 
     [signals_by_date[i].remove(v) for v in signals_by_date[i] if v < 3] 
+0

一些事情。 –

+0

思想闡述?我是新來的編程和完全自學,所以我總是歡迎有機會學習更好的做法。謝謝。 – johnjdc

+0

沒有實際的數據很難給出確切的答案,但我相當肯定所有這些都可以被壓縮成一條線。 –

回答

4

最後一行應改爲:

signals_by_date[i] = [v for v in signals_by_date[i] if v >= 3] 
+0

工作。謝謝。但是,如果我想要這樣做:signal_by_date [i] = [v for signals_by_date [i]如果v <= -.02且v> = 0.02] – johnjdc

+0

您的條件將針對每個數字計算爲false 。如果你想要的數字介於-.02和.02之間,你可以: [v for v in x如果-0.02 <= v <= 0.02] –

1

大概,當您移除每個項目時,您將移動列表中的項目,以便跳過查看每一個項目。一般而言,我認爲列表理解是爲了從現有列表中累積新列表,而不是對原始列表中的項目產生副作用;當然不會改變理解清單的結構。