Python中的<<有什么作用?
我在Project Euler上解决了一个问题,但运行时间大约花了4分钟,这超过了推荐的时间,所以我在论坛上查看了不同的解决方案。其中一个方案在列表推导式中用了一个符号<<
。它的样子是这样的:
blist.extend([(i << 1) + 3 for i in range(num) if alist.get(i)])
我找不到这个<<
符号到底是干什么用的。有人能帮我解释一下吗?
3 个回答
1
这就是左移运算符。它会把变量 i 中的所有二进制位向左移动一步,实际上就是把 i 乘以 2。
http://docs.python.org/py3k/reference/expressions.html#shifting-operations
1
这是一个二进制位移运算符。
x << n
x shifted left by n bits
x >> n
x shifted right by n bits
10
这是一个位移运算符(可以参考Python文档),在很多编程语言中都很常见,比如C、Java、PHP等等。根据Python文档的解释:
它们会把第一个参数向左或向右移动,移动的位数由第二个参数决定。
向右移动n位可以理解为用2的n次方去除,而向左移动n位则是用2的n次方去乘。负的移动位数会引发一个
ValueError
错误。
所以在你的例子中,i << 1
表示向左移动1位,这就相当于乘以2的1次方,也就是2。