Python 3.x 如何更改使用xrange在Python3中运行的代码?

Python 3.x 如何更改使用xrange在Python3中运行的代码?,python-3.x,python-2.x,Python 3.x,Python 2.x,我正在阅读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 xran

我正在阅读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_编号)+1)
更改为
列表(range(2,int(sqrt_编号)+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中,不能被列表除。作者以该代码为例说明了向量化将是什么样子。
#下面的一行是无效的Python代码
注释是原始注释,表明这一点

功能和语义方面最接近的可能是以下代码:

导入数学
def检查素数(数字):
sqrt_number=math.sqrt(number)
数字\浮点数=浮点数(数字)
编号=列表(范围(2,整数(sqrt_编号)+1))
对于范围内的i(0,len(数字),5):
#下面这行代码现在是有效的Python代码,但没有矢量化
结果=[(数字\u浮点/n)。是数字[i:(i+5)]中n的整数]
如果有(结果):
返回错误
返回真值

请注意,此版本中的结果处理不是并行完成的,因此这可能不是作者想要演示的。据我所知,在Python中,矢量化不是本机可用的,您必须使用
numpy
来实现。如果你想尝试,应该会很有用。

谢谢Sry的非阅读偏见,我会更加小心。不要太担心,它会发生的。我们倾向于期望编程书中的代码是有效的