代码之家  ›  专栏  ›  技术社区  ›  Jason S

python列表帮助

  •  2
  • Jason S  · 技术社区  · 14 年前

    简单的python问题:

    示例列表: A = [1,2,3,4,5]

    我需要生成另一个列表B 这是A表的浅显复制品 这样B是一个新的列表,其中包含相同的元素,顺序相同(这样我就可以用不影响A的B元素替换其中的一个)。我该怎么做?


    澄清:我想做一些像

    def some_func(A)
       B = {what do I do here to get a copy of A's elements?}
       B[0] = some_other_func(B[0])
       yet_another_func(B)
    

    基于您所有的答案+python文档,我想做的更好的方法是:

    def some_func(A)
       B = [some_other_func(A[0])] + A[1:]
       yet_another_func(B)
    

    谢谢你指点我正确的方向!

    6 回复  |  直到 14 年前
        1
  •  5
  •   Steven Rumbalski    14 年前

    以下是复制列表A的3种方法:

    使用切片表示法:

    copy_of_A = A[:]
    

    使用列表构造函数:

    copy_of_A = list(A)
    

    使用复制模块:

    from copy import copy
    copy_of_A = copy(A)
    

    如你所要求的,这些副本都是浅薄的。要了解浅拷贝和深拷贝之间的区别,请阅读 documentation of the copy module .

        2
  •  8
  •   JoshD    14 年前

    那将是一个深刻的复制品,而不是一个肤浅的复制品。

    默认情况下,列表复制浅。这就是为什么 deepcopy 命令在 copy module .

    B = copy.deepcopy(A)

    可选地, B = A[:] 会的。但要记住Deepcopy的未来。更复杂的数据类型可以从中受益。


    添加了有关副本的信息:

    浅拷贝:

    b = [1,2]
    a = b
    b[0] = 11
    print a  // [1,11]
    

    深拷贝:

    b = [1,2]
    a = b[:]
    b[0] = 11
    print a  // [1,2]
    

    但是,此外:

    >>> a = [[1,2]]
    >>> b = a[:]
    >>> b
    [[1, 2]]
    >>> a
    [[1, 2]]
    >>> a[0][0] = 11
    >>> a
    [[11, 2]]
    >>> b
    [[11, 2]]
    >>>
    

    因此,在本例中,元素本身是浅拷贝。

        3
  •  3
  •   Ross Light    14 年前

    这样地:

    B = A[:]
    
        4
  •  3
  •   Brandon E Taylor    14 年前

    您可以按以下方式执行该复制:

    B = A[:]
    
        5
  •  3
  •   unutbu    14 年前

    B=A[:] 足够的:

    In [22]: A=[1,2]
    
    In [23]: B=A[:]
    
    In [24]: B[0]=100
    
    In [25]: A
    Out[25]: [1, 2]
    
    In [26]: B
    Out[26]: [100, 2]
    

    A[:] 使用切片表示法获取包含 A . 因为python列表的切片 总是 返回新列表,您将获得 .

    请注意,B中的元素与A中的元素相同。 如果这些元素是可变的,通过b突变它们将影响a。

        6
  •  2
  •   Sujoy    14 年前
    import copy
    A=[1,2,3,4,5]
    B=copy.copy(A)
    B[0]=9999
    print B[0]
    print A[0]
    

    import copy 使用 copy.copy() 用于复制。 看见 this 供参考。