[Python学习日记] 列表、元组深入学习

  • 目录
  • 列表
  • 元组
  • 列表与元组的相互转换


目录

昨天对与Python中的列表与元组有了初步的了解,今天准备对于列表与元组进行深入的学习,并将其运用到实例里面。

列表

python 创建二维列表,将需要的参数写入 cols 和 rows 即可,格式如下

list_2d = [[0 for col in range(cols)] for row in range(rows)]

实例 新建一个五行五列的二维列表

>>>list_2d = [ [0 for i in range(5)] for i in range(5)]
>>>list_2d
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> list_2d[0].append(3)
>>> list_2d[2].append(7)
[[0, 0, 0, 0, 0,3], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0,7], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

列表推导式
列表推导式书写形式
[表达式 for 变量 in 列表]或者[表达式 for 变量 in 列表 if 条件],条件就是通过 for 语句处理表达式里面的变量,如果还要加条件,就加 if 条件就可以了。
实例

li = [1,2,3,4,5,6,7,8,9]
print ([x**2 for x in li])
print ([x**2 for x in li if x>5])
print ([ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8 ])
结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
[36, 49, 64, 81]
[(5, 9), (7, 9), (9, 9)]

元组

tuple和list非常类似,但是tuple一旦初始化就不能修改。元组所指向的内存实际上保存的是元组内数据的内存地址集合(即 t[0], t[1]…t[n] 的内存地址),且元组一旦建立,这个集合就不能增加修改删除,一旦集合内的地址发生改变,必须重新分配元组空间保存新的地址集(元组类似 C 语言里的指针数组,只不过这个数组不能被修改)。
实例

print("连接前:")
t1=(1,2,"3")
t2=("4",5,["d1","d2"])
print("t1=",t1);
print("t2=",t2);
print("t1:",id(t1))
print("t2:",id(t2))
print("t1[0]:",id(t1[0]))
print("t1[1]:",id(t1[1]))
print("t1[2]:",id(t1[2]))
print("t2[0]:",id(t2[0]))
print("t2[1]:",id(t2[1]))
print("t2[2]:",id(t2[2]))
print("连接后:")
t1= t1+t2
print("t1(t1+t2):",id(t1))
print("t1[0]:",id(t1[0]))
print("t1[1]:",id(t1[1]))
print("t1[2]:",id(t1[2]))
print("t1[3]:",id(t1[3]))
print("t1[4]:",id(t1[4]))
print("t1[5]:",id(t1[5]))
t1[5].append("d3")
print("t1[5]增加d3:")
print("t1[5]=",t1[5])
print("t1[5]:",id(t1[5]))
print("t2=",t2);输出:连接前:
t1= (1, 2, '3')
t2= ('4', 5, ['d1', 'd2'])
t1: 1719219799168
t2: 1719219799528
t1[0]: 1378249760
t1[1]: 1378249792
t1[2]: 1719200188208
t2[0]: 1719199042336
t2[1]: 1378249888
t2[2]: 1719219441608
连接后:
t1(t1+t2): 1719222365256
t1[0]: 1378249760
t1[1]: 1378249792
t1[2]: 1719200188208
t1[3]: 1719199042336
t1[4]: 1378249888
t1[5]: 1719219441608
t1[5]增加d3:
t1[5]= ['d1', 'd2', 'd3']
t1[5]: 1719219441608
t2= ('4', 5, ['d1', 'd2', 'd3'])

元组 t1 跟 t2 连接并赋值 t1 后,t1 地址发生变化(因地址集合变化),t1[0], t1[1], t1[2], t2[0], t2[1], t2[2] 地址不变且保存在连接后的 t1,元组内数据根据自身类型确定是否可修改值(t1[0]…t1[4] 分别为不可修改的数据类型,t1[5] 为可修改的列表),连接后 t1[5] 跟 t2[2] 地址一样,t1[5] 变化将会导致 t2[2] 变化。

列表与元组的相互转换

元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。
list() 方法用于将元组或字符串转换为列表。
tuple()将列表转换为元组。
语法
list()方法语法:list( seq )
tuple()方法语法:tuple(seq)
其中参数seq为 要转换为列表/元组的元组/列表或字符串。

aTuple = (123, 'Google', 'Hello', 'Taobao')
list1 = list(aTuple)
print ("列表元素 : ", list1)

list1= ['Google', 'Taobao', 'Hello', 'Baidu']
tuple1=tuple(list1)
print ("元组元素 : ", tuple1)

实例输出结果如下
列表元素 :  [123, 'Google', 'Hello', 'Taobao']
('Google', 'Taobao', 'Hello', 'Baidu')