【问题标题】:Pythonic way of copying deep sublists复制深层子列表的 Pythonic 方式
【发布时间】:2019-12-04 22:13:58
【问题描述】:

我有一个深度列表a=[[1, 2], 3],我想多次复制第一个列表的第一个条目以获得[[1, 1, 1, 2], 3]

我的尝试:

number_of_multiplications = 2
for _ in range(number_of_multiplications):
  a[0] = a[0][:1] + a[0]

问题:有没有办法在没有循环的情况下做到这一点?

奖励:我如何确保我正在复制的元素创建一个深层副本而不是浅层副本?

【问题讨论】:

    标签: python


    【解决方案1】:
    a = [[1, 2], 3]
    number_of_multiplications = 2
    a[0] = [a[0][0]] * (number_of_multiplications + 1) + a[0][1:]
    print(a)    # [[1, 1, 1, 2], 3]
    

    我们这里有第一阶段的列表乘法[a[0][0]] * (number_of_multiplications + 1)(给出[1,1,1])和第二阶段的列表连接[1,1,1] + a[0][1:](其中a[0][1:]是位于@中的关键子列表的剩余条目的一部分987654326@)

    【讨论】:

    • 谢谢!在您看来:使您的代码成为深层副本的关键部分是什么?我仍然不明白,因为我在浅拷贝方面遇到了问题。
    • @Carsten,实际上我不会将其称为“复制深层子列表”。我们这里有第一阶段的列表乘法[a[0][0]] * (number_of_multiplications + 1)(给出[1,1,1])和第二阶段的列表连接[1,1,1] + a[0][1:](其中a[0][1:]是位于a[0]中的关键子列表的剩余条目的一部分)
    【解决方案2】:
    number_of_multiplications = 2
    a = [[1, 2], 3]
    a[0]=a[0][:1]*number_of_multiplications+a[0]
    

    【讨论】:

    • 谢谢!在您看来:使您的代码成为深层副本的关键部分是什么?我仍然不明白,因为我在浅拷贝方面遇到了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2015-04-05
    • 1970-01-01
    • 2010-10-29
    • 2012-11-18
    相关资源
    最近更新 更多