【发布时间】:2015-02-26 22:24:27
【问题描述】:
给定一个包含 bool 元素的列表 A 和另一个长度相同的列表 B,目标是本质上做一些事情
B = [B[i] for i in xrange(len(A)) if A[i]]
然而,有时B 并不是一个基本的python 列表;例如,它可能使用manager.list() 创建,其中manager 是multiprocessing 模块中Manager() 的一个实例。上面的列表推导会把它变成一个普通的列表,这将失去想要的功能(在子进程之间共享数据)。
我想出的是类似的东西
def my_filter(A, B):
c = 0
for i in xrange(len(A)):
if not A[i]:
B.pop(i-c)
c = c + 1
这样my_filter(A, B) 将把B 变成它的子列表,其中A 的元素是True。
但是,这有点“丑陋”。有没有更“pythonic”的方式来做到这一点?
【问题讨论】:
标签: python list filter list-comprehension