有没有循环二进制数的函数?例如:
100010001000 turns 010001000100
and it turns 001000100010 then 000100010001 and then 100010001000 so on so forth
最佳答案
如果 100010001000 是一个字符串,那么它是 Python 中的一个序列。
因此,您可以使用包含 cycle
的 itertools
包。功能。
这个函数可以循环迭代你的二进制字符串:
>>> n = "100010001000"
>>> c = itertools.cycle(n)
>>> next(c)
'1'
>>> next(c)
'0'
>>> next(c)
'0'
>>> next(c)
'0'
>>> next(c)
'1'
...
您可以使用此函数来移动数字:
>>> c = itertools.cycle(n)
>>> next(c)
'1'
>>> "".join(next(c) for _ in range(len(n)))
'000100010001'
如果重复最后两个操作,就会得到循环(但以另一种方式)。
您还可以使用切片串联,例如:
>>> n = "100010001000"
>>> n = n[-1:] + n[0:-1]
>>> n
'010001000100'
>>> n = n[-1:] + n[0:-1]
>>> n
'001000100010'
>>> n = n[-1:] + n[0:-1]
>>> n
'000100010001'
如果您的数字是整数,则可以使用二元运算符,例如 >>、<<、& 和 |。 为此,您需要知道二进制整数的长度,这里有 12 位数字。 只需计算所有数字设置为 1 的掩码 m 即可。然后进行旋转:
>>> m = int("111111111111", 2)
>>> n = int("100010001000", 2)
>>> bin(n)
'0b100010001000'
>>> n = (n >> 1) | (n << 11) & m
>>> bin(n)
'0b10001000100'
>>> n = (n >> 1) | (n << 11) & m
>>> bin(n)
'0b1000100010'
>>> n = (n >> 1) | (n << 11) & m
>>> bin(n)
'0b100010001'
>>> n = (n >> 1) | (n << 11) & m
>>> bin(n)
'0b100010001000'
关于python - 在python中循环一个二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54373726/