Pythonic way to iterate over bits of integer

前端 未结 7 2235
面向向阳花
面向向阳花 2021-02-02 08:08

Let\'s a=109 or 1101101 in binary. How do I iterate over bits of this number, eg: [64, 32, 8, 4, 1]

7条回答
  •  半阙折子戏
    2021-02-02 08:43

    >>> [2**i for i, v in enumerate(bin(109)[:1:-1]) if int(v)]
    [1, 4, 8, 32, 64]
    

    Obviously the order is reversed here, you could either just use this or reverse the result:

    >>> [2**i for i, v in enumerate(bin(109)[:1:-1]) if int(v)][::-1]
    [64, 32, 8, 4, 1]
    

    edit: Here is a slightly longer version that should be more efficient:

    from itertools import takewhile, count
    [p for p in takewhile(lambda x: x <= 109, (2**i for i in count())) if p & 109]
    

提交回复
热议问题