【问题标题】:Python slice without copy? [duplicate]没有副本的Python切片? [复制]
【发布时间】: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 类来执行此操作,但我想知道是否有内置方法。

【问题讨论】:

  • 相关 - stackoverflow.com/questions/3485475/… 不确定在这期间是否发生了什么事,所以不要投票结束作为重复:-)
  • 除了链接问题中提供的答案之外,您能否指定您期望的答案:自定义 Slice 类、numpy、memoryview、生成器(迭代器)?

标签: python python-3.x slice


【解决方案1】:

使用 itertools 库中的 islice

编辑:

我明白我在哪里误解了这个问题。 好吧,没有这样的事情。如果你想创建你的类,你必须:

  1. 在你的 Slice 类中保留对原始列表的引用
  2. 定义、__iter____getitem____setitem__ 方法以使用索引转换处理原始列表

【讨论】:

  • islice 实际上不会产生可索引的序列 - 您需要实现迭代器,此时它将不再是底层序列的视图,而是它自己的序列。跨度>
猜你喜欢
  • 1970-01-01
  • 2015-05-12
  • 2014-05-26
  • 2020-01-18
  • 2011-07-05
  • 2015-02-22
  • 2015-10-06
相关资源
最近更新 更多