【问题标题】:Make a list of lists where the last value of list is incremented制作列表的列表,其中列表的最后一个值递增
【发布时间】:2022-01-18 17:24:58
【问题描述】:

我想制作一个列表列表,其中每个子列表的第二个值都大于其前任的第二个值。 例如 我的 list_of_lists = [[1, 1], [1, 2], [1, 3], [1, 4],...]

我认为这样做可以,但我不明白为什么它没有附加正确的当前版本的列表。

我要感谢 Scott 和 gionni 所做的工作,他们帮助我理解为什么我的尝试是错误的以及对象引用在其中发挥的关键作用。

代码

mylist = [1,1]
mylist_of_lists = []
for i in list(range(1,11,1)):
    print("i: ", i)
    mylist[1] = i
    print("mylist : ", mylist)
    mylist_of_lists.append(mylist)
    print("mylist_of_lists : ", mylist_of_lists)
print(mylist_of_lists)

控制台返回

i:  1
mylist :  [1, 1]
mylist_of_lists :  [[1, 1]]
i:  2
mylist :  [1, 2]
mylist_of_lists :  [[1, 2], [1, 2]]
i:  3
mylist :  [1, 3]
mylist_of_lists :  [[1, 3], [1, 3], [1, 3]]
i:  4
mylist :  [1, 4]
mylist_of_lists :  [[1, 4], [1, 4], [1, 4], [1, 4]]
i:  5
mylist :  [1, 5]
mylist_of_lists :  [[1, 5], [1, 5], [1, 5], [1, 5], [1, 5]]
i:  6
mylist :  [1, 6]
mylist_of_lists :  [[1, 6], [1, 6], [1, 6], [1, 6], [1, 6], [1, 6]]
i:  7
mylist :  [1, 7]
mylist_of_lists :  [[1, 7], [1, 7], [1, 7], [1, 7], [1, 7], [1, 7], [1, 7]]
i:  8
mylist :  [1, 8]
mylist_of_lists :  [[1, 8], [1, 8], [1, 8], [1, 8], [1, 8], [1, 8], [1, 8], [1, 8]]
i:  9
mylist :  [1, 9]
mylist_of_lists :  [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]
i:  10
mylist :  [1, 10]
mylist_of_lists :  [[1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10]]
[[1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10], [1, 10]]

期望的输出

我的 list_of_lists = [[1, 1], [1, 2], [1, 3], [1, 4],...]

【问题讨论】:

  • 嗨 gionni,它可能会,我想我必须先研究产量,因为我无法获得该答案的任何功能来做任何事情。
  • 生成器不重要,重要的是引用的解释
  • 嗨 gionni,所以我的列表列表实际上类似于 [[ref to mylist], [ref to mylist]...] 并且每次更新 mylist 时都会将更新传递给每个列表在列表列表中,因为这些子列表更新了相同的参考?

标签: python list nested-lists


【解决方案1】:

奥卡姆剃刀:它们看起来都一样的原因是它们都一样的。

您需要为每次调用 append 创建一个新列表以添加(例如,append([mylist[0],i]))。

【讨论】:

  • 嗨 Scott,我不明白我的 list_of_lists 中的列表是如何被列表的下一次迭代或您提到的新调用覆盖的。抱歉,我就是不明白。
  • 它没有被覆盖;您每次都将引用附加到同一个列表 (mylist),这就是为什么当您更改它时,mylist_of_lists 中的所有子列表都会相应更改。相反,您需要为每次调用 append 创建一个新列表。
  • 嗨,斯科特,我了解参考资料,但是(请原谅这里的知识不足)我认为我的 list_of_lists 每次都会通过附加新列表来更新。据我所知,我需要了解产量和生成器才能做到这一点。当您说“每次调用追加的新列表”时,我不确定您的意思,这是否意味着列表列表的新名称或我的列表的新名称?对不起,我知道向不明白的人解释事情是多么令人沮丧,抱歉。
  • 请查看编辑后的答案。这与yield 或生成器无关
  • 嗨 Scott,当我通过 mylist[1] 更新 mylist 时 = 我这样做的意思是列表列表中的每个列表实例都进行了更新?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2013-12-02
相关资源
最近更新 更多