得之我幸 失之我命

when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.

python 克隆 list 的方法

在 leetcode 刷题时,有些题目会标注需要原地修改 list,而不产生新的内存占用,这里提一个骚操作

1
2
3
L = [1, 2, 3]
L[:] = L[::-1]
# 原 list 倒序,原地修改

注: string 和 list 很像,但是这个用法就不适用,因为 string(区别于list)是不可变对象,不要试图用下标的方法去改变字符串的值

那如果要复制一个 list,会开辟新内存怎么办?

推荐 4 种方法:

  1. extend

    1
    2
    3
    4
    5
    L = [1, 2, 3]
    List_1 = []
    List_1.extend(L)
    print('List_1 =', List_1)
    # 解释:新建一个空 List,然后将 L 中所有的元素用 extend 的方法放入 List_1 中
  2. 切片

    1
    2
    3
    4
    L = [1, 2, 3]
    List_2 = L[:]
    print('List_2 =', List_2)
    # 解释:取 L 的切片,然后赋值给 List_2 即可
  3. 拆包(*)

    1
    2
    3
    4
    L = [1, 2, 3]
    List_3 = [*L]
    print('List_3 =', List_3)
    # 解释:将 L 中的元素拆分,然后放入一个 list 中,再然后赋值给 List_3
  4. 用乘法

    1
    2
    3
    4
    L = [1, 2, 3]
    List_4 = L * 1
    print('List_4 =', List_4)
    # 解释:数字 1 就是将 L 种的元素重复显示 1 次

其他效率不高方法,不推荐:

  1. append,效率低下

    1
    2
    3
    4
    5
    L = [1, 2, 3]
    List_5 = []
    for e in L:
    List_5.append(e)
    print('List_5 =', List_5)
  2. 列表推导

    1
    2
    3
    L = [1, 2, 3]
    List_6 = [e for e in L]
    print('List_6 =', List_6)
  3. 引入标准库中的模块

    1
    2
    3
    4
    from copy import deepcopy
    L = [1, 2, 3]
    List_7 = deepcopy(L)
    print('List_7 =', List_7)
  4. 用 list 进行封装

    1
    2
    3
    L = [1, 2, 3]
    List_8 = list(L)
    print('List_8 =', List_8)

be slow to promise and quick to perform.