Python:列表与元组的相关操作、深浅拷贝区别

列表

列表的几种表示:

 x=list(range(10))
x=[0]*5        #用 * 使列表中所有元素均相同
x = [0 for i in range(5)]      #将所有i都赋值为0

向列表中添加元素

x=[7,8,9]
x.append([1,2,3])   #追加x=[7,8,9,[1,2,3]],[1,2,3]算作一个元素,只占用一个下标
x.extend([1,2,3])   #扩展x=[7,8,9,1,2,3]
x.insert(2, 0)      #插入x=[7,8,0,9]

删除列表中的元素

x.remove('Monday')       #移除列表中某个值的第一个匹配项
 x.pop()            # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值,可以继续使用该元素
 x.pop(-3)                        #也可指定移除某个下标元素,此时删除倒数第3位元素,没有下标为-0的元素
del x[0:2]              #删除列表x中下标为0,1,2的元素,且不能再以任何方式使用这些元素

获取列表中的元素

def takeSecond(elem):
    return elem[1]         # 获取列表的第二个元素
print (x[1])        #获取列表中下标为1的元素
print (x[开始下标:结束下标:步长])    #获取的元素含开始,不含结束;步长为-1表示将列表反向排列
    #若没有开始下标,则默认从0开始;若没有结束下标,则默认到最后;若没有步长,则默认步长为1,即下标+1
print (x[:])          #获取列表中全部元素

深拷贝与浅拷贝

赋值
b = a
更改a、更改a中元素都可以改变b
在这里插入图片描述

浅拷贝

b = a.copy()
b=a[:]

更改a无法改变b;更改a中元素可以改变b
在这里插入图片描述

深拷贝

import copy
b = copy.deepcopy(a)

深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的
更改a、更改a中元素都无法改变b
在这里插入图片描述

列表的其他方法

list.count(obj)     #统计某个元素在列表中出现的次数
list.index(x[, start[, end]])       #从列表中找出某个值第一个匹配项的索引位置,[]表示可有可无
list.reverse()        #反向列表中元素
x.sort(key=lambda a: a[0])     #按照列表中第1个元素对多个列表排序;a只是临时起的一个名字,可以更改为任意的名字
def takeSecond(elem):
    return elem[1]
x.sort(key=takeSecond)       #按照列表中第2个元素对多个列表排序

元组

元组的表达

t1 = (1, 10.31,'a')
t2 = 1, 10.31,'a'  #创建元组可以用小括号 (),也可以什么都不用
x = (1,)   #元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用
print(8 * (8))  # 整型,64

添加元素到元组中

week = week[:2] + ('Wednesday',) + week[2:]

更改元组中的元素

t1[3][0] = 9  #更改第四个元素中第一个位置的值

可对元组进行操作的函数

count('python')  #记录在元组 t 中该元素出现几次
index(10.31)   #找到该元素在元组 t 的索引(下标)

解压元组

(a, b, c) = t
(a, b, (c, d)) = t           #按照元组的结构定义变量
a, b, *rest, c = t          #*rest可代表一个或多个元素,包含第三个到倒数第二个
a, b, *_ = t                  # *_可代表一个或多个元素,包含第三个到最后一个

猜你喜欢

转载自blog.csdn.net/xiaokeaiuiya/article/details/108492748