给定列表和位掩码,如何返回真值的索引对应的值?
我有一个列表 s
和一个位掩码 b
,它们的内容如下:
s = ['baa', 'baa', 'black', 'sheep', 'have', 'you', 'any', 'wool']
b = [1, 0, 0, 0, 1, 1, 1, 0] # or any iterable with boolean values
我该如何写一个函数 apply_bitmask(s, b)
,让它返回
['baa', 'have', 'you', 'any']
4 个回答
11
这段代码的意思是……
首先,它定义了一些变量,这些变量就像是用来存储信息的盒子。你可以把它们想象成你在写作业时用来记录答案的地方。
接下来,代码里有一些操作,这些操作就像是你在做数学题时的步骤。每一步都会对之前的结果进行处理,最终得到一个新的结果。
最后,代码会输出结果,也就是把计算的答案显示出来,就像你完成作业后把答案写在纸上一样。
总的来说,这段代码就是在做一些计算和处理,然后把结果告诉你。希望这样解释能让你更容易理解!
[ item for item, flag in zip( s, b ) if flag == 1 ]
20
在Python 3.1中,有一个叫做 itertools.compress 的功能(如果你还没升级,可以用 Python 2.7 的版本),它正好可以做到这一点(用列表推导式也差不多)。
import itertools
filtered = itertools.compress(s, b)
需要注意的是,这个功能返回的是一个迭代器,而不是一个列表。这样做可以节省内存,但如果你需要多次遍历这个结果或者使用索引,你可以用 list(itertools.compress(s, b))
来转换成列表。这样写依然简洁。