我有一个从0开始的整数e
的升序列表,我希望有一个二进制列表b
,i
- 元素是1,当且仅当{{ 1}}属于i
。
例如,如果e
,则此二进制列表应为e=[0,1,3,6]
,
其中第一个是因为0在[1,1,0,1,0,0,1]
中,第二个1是因为1在e
中,
第三个0是因为2不在e
中,依此类推。
您可以在下面找到我的代码。
我的问题是:是否有内置的python内容?如果没有,是我的 接近最有效率?
e
答案 0 :(得分:6)
这可以通过列表理解来完成,如果e
很大,那么最好先将其转换为set
:
>>> e = [0, 1, 3, 6]
>>> [int(i in e) for i in xrange(0, e[-1]+1)]
[1, 1, 0, 1, 0, 0, 1]
in
运算符如果在列表中找到项目则返回True / False,您可以使用int
将该bool转换为整数。请注意,对于列表,in
是O(N)
操作,因此如果e
很大,那么将其转换为集合将为您提供更高的效率。
答案 1 :(得分:0)
我认为没有内置的方法可以做到这一点。但您可以使用List Comprehensions:
a = [ 1 if i in e else 0 for i in range(1, e[-1]+1) ]
获得乐趣。