我在Project Euler上解决了一个问题,但是运行大约需要4分钟,这超过了建议的时间,因此我正在查看论坛中的不同解决方案。其中一个在列表理解中包含符号<<
。这就是它的样子
blist.extend([(i << 1) + 3 for i in range(num) if alist.get(i)])
我无法找到这个<<
符号的确切位置。有人能帮我吗?
答案 0 :(得分:10)
它是bit shift operator (Python docs),在许多编程语言中很常见,例如C,Java,PHP等。根据Python文档:
他们将第一个参数转移到了 按位数向左或向右 由第二个论点给出。
右移n位定义为 由pow(2,n)划分。左移 n位定义为乘法 用pow(2,n)。负移位计数 提出
ValueError
例外。
因此,在您的具体情况下,i << 1
表示左移1位,相当于乘以2 ^ 1,或者只是2。
答案 1 :(得分:1)
它是一个二进制按位移位运算符。
x << n
x shifted left by n bits
x >> n
x shifted right by n bits
答案 2 :(得分:1)
那是左移算子。它将i中的所有位向左移动1步,实际上将i乘以2。
http://docs.python.org/py3k/reference/expressions.html#shifting-operations