从升序整数列表的索引得到的二进制列表

2024-04-25 21:09:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个整数的升序列表e,从0开始,我想有一个二进制列表b,其i-第个元素是1,当且仅当i属于e

例如,如果e=[0,1,3,6],那么这个二进制列表应该是[1,1,0,1,0,0,1], 其中第一个1是因为0在e中,第二个1是因为1在e中 第三个0是因为2不在e中,依此类推

你可以在下面找到我的代码

我的问题是:python中是否有内置的功能?如果没有,我的 最有效的方法

def list2bin(e):
b=[1]
j=1
for i in range(1, e[-1]+1):
    if i==e[j]:
        b.append(1)
        j+=1
    else:
        b.append(0)     
return(b)

Tags: 方法代码in功能元素列表fordef
2条回答

这可以通过列表理解来完成,如果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转换为整数。请注意,对于列表,inO(N)操作,因此如果e较大,则将其转换为集合将提供更高的效率

我不认为有一种内在的方法可以做到这一点。但是您可以使用List Comprehensions

a = [ 1 if i in e else 0 for i in range(1, e[-1]+1) ]

找点乐子

相关问题 更多 >