没有副本的Python切片? [复制]
Posted
技术标签:
【中文标题】没有副本的Python切片? [复制]【英文标题】:Python slice without copy? [duplicate] 【发布时间】:2015-04-18 22:42:34 【问题描述】:有没有办法在 Python 3 中创建序列的“切片视图”,其行为类似于常规切片,但不会创建序列切片部分的副本?当原始序列更新时,“切片视图”应该反映更新。
>>> l = list(range(100))
>>> s = Slice(l, 1, 50, 3) # Should behave like l[1:50:3]
>>> s[1]
4
>>> l[4] = 'foo'
>>> s[1] # Should reflect the updated value
'foo'
我可以编写自己的 Slice
类来执行此操作,但我想知道是否有内置方法。
【问题讨论】:
相关 - ***.com/questions/3485475/… 不确定在这期间是否发生了什么事,所以不要投票结束作为重复:-) 除了链接问题中提供的答案之外,您能否指定您期望的答案:自定义 Slice 类、numpy、memoryview、生成器(迭代器)? 【参考方案1】:使用 itertools 库中的 islice
编辑:
我明白我在哪里误解了这个问题。 好吧,没有这样的事情。如果你想创建你的类,你必须:
-
在你的 Slice 类中保留对原始列表的引用
定义、__iter__、__getitem__ 和 __setitem__ 方法以使用索引转换处理原始列表
【讨论】:
islice
实际上不会产生可索引的序列 - 您需要实现迭代器,此时它将不再是底层序列的视图,而是它自己的序列。跨度>
以上是关于没有副本的Python切片? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Redshift:如何将连接表的副本复制到集群中的每个切片上?