【问题标题】:Python infinitely repeated element in list [duplicate]列表中的Python无限重复元素[重复]
【发布时间】:2019-09-09 10:56:22
【问题描述】:

我有一个列表l = [1, 2, 3],我想要l[2->infinity] == 3。它基本上看起来像[1, 2, 3, 3, 3, 3, ...]。我试过了:

[1, 2, *3]

[1, 2, 3, ...]

是否可以为一系列索引添加“默认元素”?

澄清

我不想重复元素 n 次,因为我无法在列表长度之外建立索引。我实际上想为2->infinity 中的所有索引设置一个值。该索引范围的某种默认值。

【问题讨论】:

  • Python 列表是有限的。我们不是 Haskell。
  • 由于澄清而提名此问题重新开放。我认为Harry的问题的实际答案是覆盖__getitem__(我认为问题的细节使它足够独特,但如果它是重复的,那么它就是stackoverflow.com/questions/1957780/…的重复)
  • 同意。从问题的标题来看并不明显,但是当 OP 要求“为一系列索引添加 [ing] 一个‘默认元素’”时,是的,很明显 __getitem__ 是要走的路。这肯定是有效获得a[1000000] 的更好方法。

标签: python list


【解决方案1】:

我能想到的最好方法是将两个迭代器链接在一起,如下所示:

from itertools import *

chain([1, 2], repeat(3))

REPL 示例:

>>> list(islice(chain([1, 2], repeat(3)), 10))
[1, 2, 3, 3, 3, 3, 3, 3, 3, 3]

【讨论】:

    【解决方案2】:

    除了 Chris 的回答之外,您还可以创建自己的生成器:

    def inf3():
        yield 1
        yield 2
        while True:
            yield 3
    
    >>> g = inf3()
    >>> [next(g) for _ in range(100)]
    [1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
    

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2011-05-07
      • 2014-06-12
      • 1970-01-01
      • 2015-08-18
      相关资源
      最近更新 更多