Binary list from indices of ascending integer list

喜你入骨 提交于 2020-08-26 09:47:27

问题


I have an ascending list of integers e that starts from 0 and I would like to have a binary list b whose i-th element is 1 if and only if i belongs to e.

For example, if e=[0,1,3,6], then this binary list should be [1,1,0,1,0,0,1], where the first 1 is because 0 is in e, the second 1 is because 1 is in e, the third 0 is because 2 is not in e, and so on.

You can find my code for that below.

My question is: is there something built-in in python for that? If not, is my approach the most efficient?

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)

回答1:


This can be done with a list comprehension, and in case e is huge then better convert it to a set first:

>>> e = [0, 1, 3, 6]
>>> [int(i in e) for i in xrange(0, e[-1]+1)]
[1, 1, 0, 1, 0, 0, 1]

The in operator returns True/False if an item is found in the list, you can convert that bool to an integer using int. Note that for lists the in is O(N) operation, so if e is large then converting it to a set will provide you much more efficiency.




回答2:


I don't think there are a built-in way to do that. But you can use List Comprehensions:

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

Get fun.



来源:https://stackoverflow.com/questions/21409461/binary-list-from-indices-of-ascending-integer-list

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!