如何遍历一个切片?

时间:2019-03-01 09:19:28

标签: python python-3.x loops iterator slice

Python中的slice是不可迭代的。这段代码:

s = slice(1, 10, 2)
iter(s)

导致此错误:

TypeError: 'slice' object is not iterable

这是我通过创建可迭代的列表来显示切片的代码:

list(range(s.start, s.stop, s.step))

这使用切片对象的startstopstep属性。我将它们插入一个范围(不可变序列类型)并创建一个列表:

[1, 3, 5, 7, 9]

是否缺少某些内容?我可以更好地迭代切片吗?

3 个答案:

答案 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