【问题标题】:Create new list with positive elements [closed]创建具有积极元素的新列表[关闭]
【发布时间】:2012-12-27 02:41:03
【问题描述】:

我正在尝试在循环中创建一个新列表(不更改名称),它将删除所有负数或零元素,最终改变其长度。谁是最快的方法?我失去了最后几天试图做的事情......

【问题讨论】:

标签: python list loops python-3.x


【解决方案1】:

尝试使用过滤器:

newlist = filter(lambda a: a>0, [1,2,3])

[i for i in original_list if i > 0](如上面cmets中提到的)

【讨论】:

  • 是的。 python3应该没有问题。
【解决方案2】:

我知道它是 python 中的一种宗教,无论是否使用 lambda,但对于这个简单的示例,我不会使用过滤器。

我个人更喜欢包含列表和集合的解决方案:

a = [1,2,-1,0,-1,...] # some list
for i in set(a):
    if (i <= 0): 
         while (a.count(i)>0): a.remove(i)

【讨论】:

  • 这行不通,除了性能问题:如果有两个 -1 元素,你只会删除其中一个。
  • @DSM 好吧,第一个版本不行,因为a.remove(x) 一次只删除一个元素,但为什么你认为 lambda 函数的性能更好?
  • 您的代码的问题不是 lambda/没有 lambda(我首选的解决方案是 listcomp 之一)。问题是您必须(1)每次找到否定元素时扫描整个列表,以及(2)每次从a 中间删除一个元素时,您必须创建一个新列表,即非常慢。在 a = range(-10**4, 10**4) 上同时尝试 listcomp 解决方案和您的解决方案。您的方法将花费数千倍的时间。
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 2012-10-25
  • 1970-01-01
  • 2013-08-24
相关资源
最近更新 更多