采取以下代码:
import itertools as it
import numpy as np
data = ['a','b','c','d']
dw = np.array([1, 3], dtype=np.int64)
print(list(it.islice(data,dw[0],dw[1],1)))
在Python 2.7上,它可以['b', 'c',]
按预期打印。
在Python 3.6上,它引发异常:
ValueError: Stop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize.
同样np.int32
,itertools
软件包的其他方法也会引发类似的错误,例如,使用permutations
get时TypeError: Expected int as r
。
除了这个令人毛骨悚然的问题和相关问题之外,我在这方面找不到太多的东西,但是3年前被关闭意味着它已经解决了。
使用numpy int进行索引data[dw[0]]
或进行布尔比较等基本操作dw[0] == 1
就可以了。
我想念什么吗?这可能是Python 3错误吗?
一个numpy.int64
显然不是的子类int
a, b = dw[0], dw[1]
type(a)
numpy.int64
isinstance(a, int)
False
该文件提到了这一点明确
警告
int_类型不会从Python 3内置的int继承,因为int类型不再是固定宽度的整数类型。
print(list(it.islice(data, int(dw[0]) , int(dw[1]), 1)))
或numpy切片
data[dw[0]:dw[1]:1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句