首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在切片上迭代?

如何在切片上迭代?
EN

Stack Overflow用户
提问于 2019-03-01 17:19:28
回答 3查看 3.3K关注 0票数 7

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

代码语言:javascript
复制
s = slice(1, 10, 2)
iter(s)

导致此错误:

代码语言:javascript
复制
TypeError: 'slice' object is not iterable

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

代码语言:javascript
复制
list(range(s.start, s.stop, s.step))

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

代码语言:javascript
复制
[1, 3, 5, 7, 9]

是不是少了点什么?我还能更好地迭代切片吗?

EN

回答 3

Stack Overflow用户

发布于 2019-03-01 17:50:28

slice不是可迭代的。它不包含元素,而是指定如果将切片应用于某个可迭代对象,将返回该可迭代对象中的哪些元素。

因为它不是可迭代的,所以你不能遍历它。但是,正如您已经发现的那样,您可以使用range()从应用它的迭代器获得它将返回元素的索引-并且您可以使用对其进行迭代:

代码语言:javascript
复制
s = slice(1, 10, 2)
indices = range(s.start, s.stop, s.step)
it = iter(indices)

代码语言:javascript
复制
>>> list(it)
[1, 3, 5, 7, 9]
票数 3
EN

Stack Overflow用户

发布于 2020-08-25 20:46:20

将切片转换为范围,然后可以迭代该范围。

代码语言:javascript
复制
range(10**10)[slice]
票数 1
EN

Stack Overflow用户

发布于 2021-03-17 03:17:26

这个问题比答案更一般。Slice可以将浮点数作为一个步骤,而range只能接受整数。因此,更一般地说:

代码语言:javascript
复制
test=slice(0,1,0.01)
testlist=[x*test.step for x in range(0,int((test.stop-test.start)/test.step+1))]

您可能会得到舍入误差,其中讨论了备选方案的here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54941439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档