2011-11-17 71 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

大概,当您移除每个项目时,您将移动列表中的项目,以便跳过查看每一个项目。一般而言,我认为列表理解是为了从现有列表中累积新列表,而不是对原始列表中的项目产生副作用;当然不会改变理解清单的结构。