如何在 python 3 中将此使用 xrange 的代码更改为 运行?
how to change this code that use xrange to run in python 3?
我正在阅读 O'Reilly 合集中的高性能 Python 一书,在第 11 页我发现这段代码适用于 python 2,这里的重点是一条指令同时执行(通过向量化)多条指令
import math
def check_prime(number):
sqrt_number = math.sqrt(number)
number_float = float(number)
numbers = range(2, int(sqrt_number)+1)
for i in xrange(0, len(numbers), 5):
# the following line is not valid Python code
result = (number_float / numbers[i:(i+5)]).is_integer()
if any(result):
return False
return True
但是我得到这个错误
TypeError: unsupported operand type(s) for /: 'float' and 'list'
我已经尝试将其更改为在 python 3 上工作,这是我的尝试:
import math
def check_prime(number):
sqrt_number = math.sqrt(number)
number_float = float(number)
numbers = list(range(2, int(sqrt_number)+1))
for i in range(0, len(numbers), 5):
# the following line is not valid Python code
result = (number_float / numbers[i:(i+5)]).is_integer()
if any(result):
return False
return True
我将 xrange
更改为 range
,将 range(2, int(sqrt_number)+1)
更改为 list(range(2, int(sqrt_number)+1))
,但我没有成功。我想有一个特殊的集合运算符或类似的东西但不知道。如果你们中的任何人可以帮助我,我将非常感激你们
试试这个:
import math
def check_prime(number):
sqrt_number = math.sqrt(number)
number_float = float(number)
numbers = list(range(2, int(sqrt_number)+1))
for i in range(0, len(numbers), 5):
result = [number_float % num == 0 for num in numbers[i:(i+5)]]
if any(result):
return False
return True
我看了这本书,那条线实际上不应该按原样工作;您不能除以 Python 中的列表。作者使用该代码作为向量化 会 的示例。 # the following line is not valid Python code
评论在原文中表示。
在功能和语义方面最接近的可能是这段代码:
import math
def check_prime(number):
sqrt_number = math.sqrt(number)
number_float = float(number)
numbers = list(range(2, int(sqrt_number)+1))
for i in range(0, len(numbers), 5):
# the following line is now valid Python code, but not vectorized
result = [(number_float / n).is_integer for n in numbers[i:(i+5)]]
if any(result):
return False
return True
请注意,此版本中的结果处理不是并行完成的,因此这可能不是作者想要演示的。据我所知,矢量化在 Python 中不可用,您必须使用 numpy
来完成。 This article如果你想试试应该会有用。
我正在阅读 O'Reilly 合集中的高性能 Python 一书,在第 11 页我发现这段代码适用于 python 2,这里的重点是一条指令同时执行(通过向量化)多条指令
import math
def check_prime(number):
sqrt_number = math.sqrt(number)
number_float = float(number)
numbers = range(2, int(sqrt_number)+1)
for i in xrange(0, len(numbers), 5):
# the following line is not valid Python code
result = (number_float / numbers[i:(i+5)]).is_integer()
if any(result):
return False
return True
但是我得到这个错误
TypeError: unsupported operand type(s) for /: 'float' and 'list'
我已经尝试将其更改为在 python 3 上工作,这是我的尝试:
import math
def check_prime(number):
sqrt_number = math.sqrt(number)
number_float = float(number)
numbers = list(range(2, int(sqrt_number)+1))
for i in range(0, len(numbers), 5):
# the following line is not valid Python code
result = (number_float / numbers[i:(i+5)]).is_integer()
if any(result):
return False
return True
我将 xrange
更改为 range
,将 range(2, int(sqrt_number)+1)
更改为 list(range(2, int(sqrt_number)+1))
,但我没有成功。我想有一个特殊的集合运算符或类似的东西但不知道。如果你们中的任何人可以帮助我,我将非常感激你们
试试这个:
import math
def check_prime(number):
sqrt_number = math.sqrt(number)
number_float = float(number)
numbers = list(range(2, int(sqrt_number)+1))
for i in range(0, len(numbers), 5):
result = [number_float % num == 0 for num in numbers[i:(i+5)]]
if any(result):
return False
return True
我看了这本书,那条线实际上不应该按原样工作;您不能除以 Python 中的列表。作者使用该代码作为向量化 会 的示例。 # the following line is not valid Python code
评论在原文中表示。
在功能和语义方面最接近的可能是这段代码:
import math
def check_prime(number):
sqrt_number = math.sqrt(number)
number_float = float(number)
numbers = list(range(2, int(sqrt_number)+1))
for i in range(0, len(numbers), 5):
# the following line is now valid Python code, but not vectorized
result = [(number_float / n).is_integer for n in numbers[i:(i+5)]]
if any(result):
return False
return True
请注意,此版本中的结果处理不是并行完成的,因此这可能不是作者想要演示的。据我所知,矢量化在 Python 中不可用,您必须使用 numpy
来完成。 This article如果你想试试应该会有用。