【问题标题】:Whats the fastes way to delete objects with specific atributes from a list [duplicate]什么是从列表中删除具有特定属性的对象的最快方法[重复]
【发布时间】:2020-07-26 04:37:08
【问题描述】:

这是我想出的,但感觉很笨拙 它必须是缓慢的解决方案。

class classNameHere(object):
    def __init__(self, number):
        self.value = number

classes = [classNameHere(i) for i in range(1000)]

print(len(classes))

pos = 0

while pos <= len(classes)-1:
    if classes[pos].value % 2:
        del(classes[pos])
    else:
        pos += 1
        
print(len(classes))

【问题讨论】:

  • 这会导致一些问题。不要在迭代时操作列表。
  • @jizhihaoSAMA 鉴于pos 仅在从列表中删除任何内容时才会增加,那么这在技术上不会导致问题
  • @vallentin 在某些特定情况下。如果他想删除一些连续的元素,就会导致这个问题。

标签: python list performance class


【解决方案1】:

您可以使用列表推导:

class classNameHere(object):
    def __init__(self, number):
        self.value = number

classes = [classNameHere(i) for i in range(1000)]
classes = [pos for pos in classes if not pos.value % 2]

print(len(classes))

输出:

500

【讨论】:

  • 天哪,好 100 倍。我不知道您可以将 if 语句放入列表推导中。这打开了这么多门。列表推导速度快吗?
  • @TheDopplerEffect,这篇文章应该回答你的问题Are list comprehensions fast?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2015-10-22
  • 1970-01-01
相关资源
最近更新 更多