【问题标题】:Repeat a list within a list X number of times在列表中重复列表 X 次
【发布时间】:2013-04-12 07:55:19
【问题描述】:

我正在处理一个项目,我需要在一个列表中重复某个列表一定次数。显然,L.append(L) 只是再次添加元素而不创建单独的列表。我只是不知道如何使列表在大列表中分开。

简而言之,这就是我所拥有的:

L = [1,2,3,4,5]

如果我想重复,比如 3 次,那么我会:

L = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]

我如何实现这一目标?我正在大列表中寻找列表。

【问题讨论】:

  • 附带说明,L.append(L) 不是这样。试试看;您会对它的作用感到惊讶(并且值得理解)。
  • @abarnert 哇,我从来不知道。这只是在找到无限循环时执行的操作吗?
  • 它只是将L 本身的副本添加为L 的最后一个元素。它没有什么必然是无限的……但是如果你试着把它弄平,或者像一棵树一样走路,会给你一个无限循环。 (如果你想一想,打印出一个列表意味着像一棵树一样行走……但是 Python 足够聪明,可以在打印出一个列表时检查这一点,所以你会得到 [1, 2, 3, 4, 5, [...]] 而不是无限的文本墙。)跨度>
  • @Haidro:无论如何,正如您在回答中解释的那样,这与 mylist[0]mylist[1] 是对同一事物的引用实际上是相同的。只是LL[5] 是指同一个东西。

标签: python list nested-lists


【解决方案1】:

不需要任何功能:

>>> L = [1,2,3,4,5]
>>> [L]*3
[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]

但是,您应该注意,如果您更改任何列表中的一个值,所有其他值都会更改,因为它们引用了同一个对象。

>>> mylist = [L]*3
>>> mylist[0][0] = 6
>>> print mylist
[[6, 2, 3, 4, 5], [6, 2, 3, 4, 5], [6, 2, 3, 4, 5]]
>>> print L
[6, 2, 3, 4, 5]

为了避免这种情况:

>>> L = [1,2,3,4,5]
>>> mylist = [L[:] for _ in range(3)]
>>> mylist[0][0] = 6
>>> print L
[1, 2, 3, 4, 5]
>>> print mylist
[[6, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]

注意L 没有变化,只有mylist 中的第一个列表发生了变化。

感谢 cmets 中的每个人的帮助 :)。

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2022-01-06
    • 2020-01-26
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多