弹出Python列表中的所有项目

时间:2014-02-06 16:36:48

标签: python python-2.7 list-comprehension

我想知道是否有办法从Python列表中“弹出所有”项目?

它可以在几行代码中完成,但操作看起来很简单我只是假设必须有一个比复制和清空原始文件更好的方法。我在谷歌搜索了很多,在这里搜索,但无济于事。

我意识到弹出所有项目只会返回原始列表的副本,但这正是我想要做到的原因。我不想返回列表,而是返回其中包含的所有项目,同时清除它。

class ListTest():
    def __init__(self):
        self._internal_list = range(0, 10)

    def pop_all(self):
        result, self._internal_list = self._internal_list[:], []
        return result

        # ... instead of:
        # return self._internal_list.pop_all()


t = ListTest()

print "popped: ", t.pop_all()
print "popped: ", t.pop_all()

...当然会返回预期的内容:

popped:  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
popped:  []

2 个答案:

答案 0 :(得分:5)

这正是它的完成方式。我能想到的唯一实质性改进是就地清空列表:

def pop_all(l):
    r, l[:] = l[:], []
    return r

此版本与您的版本之间的区别在于从各个位置引用的列表上的行为:

>>> a = [1, 2, 3]
>>> b = a
>>> pop_all(a)
[1, 2, 3]
>>> b
[]

答案 1 :(得分:2)

事实上,为什么不呢

def pop_all(self):
    result, self._internal_list = self._internal_list, []
    return result

...无论如何你要重新分配self._internal_list,为什么不回复旧的而不是复制呢?