没有副本的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:如何将连接表的副本复制到集群中的每个切片上?

为啥 Python 3 中的切片仍然是副本而不是视图?

Python:SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值

切片表示法不会在内存中创建新副本

有效地将切片插入另一个切片

同一性和切片副本