Python中的slice
是不可迭代的。这段代码:
s = slice(1, 10, 2)
iter(s)
导致此错误:
TypeError: 'slice' object is not iterable
这是我通过创建可迭代的列表来显示切片的代码:
list(range(s.start, s.stop, s.step))
这使用切片对象的start
,stop
和step
属性。我将它们插入一个范围(不可变序列类型)并创建一个列表:
[1, 3, 5, 7, 9]
是否缺少某些内容?我可以更好地迭代切片吗?
答案 0 :(得分:1)
slice
不可迭代。它不包含元素,而是指定如果将切片应用于该可迭代对象,则返回其他可迭代对象中的哪些元素。
由于它不是可迭代的,因此无法对其进行迭代。但是,正如您所发现的,您可以使用range()
-从其应用的可迭代对象中获取将为其返回元素的索引,并且您可以对其进行迭代:>
s = slice(1, 10, 2)
indices = range(s.start, s.stop, s.step)
it = iter(indices)
>>> list(it)
[1, 3, 5, 7, 9]
答案 1 :(得分:0)
将切片转换为一个范围,然后可以迭代该范围。
range(10**10)[slice]
答案 2 :(得分:0)
问题比答案更笼统。 Slice 可以将浮点数作为步骤,而 range 只能采用整数。更一般地说:
test=slice(0,1,0.01)
testlist=[x*test.step for x in range(0,int((test.stop-test.start)/test.step+1))]
您可能会遇到四舍五入错误,此处讨论了替代方案 here