列表详解
1.列表类型支持很多方法,列表对象对应的方法如下
1.1 list.append(x)
向列表末尾添加一个元素,相当于a[len[a]:]=x
1.2 list.extend(iterable)
由于可迭代对象的元素扩展列表,相当于a[len[a]:]=iterable
1.3 list.insert(i,x)
向指定位置插入元素,第一个参数是插入元素的索引,因此 a.insert(0,x)是向列表开头插入元素,a.insert(lent(a),x)是向列表末尾插入元素
1.4 list.remove(x)
从列表总删除第一个值为x的元素,未找到元素时,会触发ValueError异常
1.5 list.pop(i)
删除列表指定位置的元素,并返回指定的元素,未找到元素时,会删除并返回列表最后一个元素
1.6 list.clear()
删除列表所有元素,相当于 del a[:]
1.7 list.index(x,[start[,end]])
返回列表第一个值为x的零基索引,未找到元素时,会触发ValueError异常。
可选参数start,end是切片符号,用于的搜索位置限制为列表的特定子序列。返回的的
索引是相当于整个序列开始计算的,而不是start
1.8 list.count(x)
返回列表总元素x出现的次数
1.9 list.sort(*,key=None,reverse)
就地排序列表总元素,(需要自定义排序参数,参考sorted())
1.10 list.reverse()
翻转列表中的元素
11.1 list.copy()
返回列表,相当于a[:]
2.列表实现其他结构
2.1 堆(后进先出)
stack=[1,2,4]
stack.append(5)
stact.append(7)
x=stack.pop() x=7
x1=stack.pop() x1=5
2.2 队列(先进先出)
stack=[1,2,4]
stack.append(5)
x=stack.popleft() x=1
x1=stack.popleft() x1=2
3 列表推导式
列表推导式的方挂号内包含一下内容:一个表达式,后面为一个for 子句,然后,是零个或多个for 或if 子句。结果是由表达式依据for 和if子句求值计算而得出一个新列表。
squares=list(map(lambda x:x**2,range(10)))
squares=[x**2 for x in range(10)]
[(x,y) for x in [1,2,4] for y in [3,1,4] if x !=y]
列表推导式可以使用复杂的表达式和嵌套韩素
from math import pi
[str(round(pi,i)) for i in range(1,6)]
嵌套的列表推导式
列表推导式中的初始表达式可以式任何表达式,甚至可以式宁一个列表推导式
matrix = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
]
[[row[i] for row in matrix] for i in range(4)]
#等价于
transposed=[]
for i in range(4):
transposed.append([row[i] for row in matrix])
print(transposed)
# 反过来说,也等价于
transposed2[]
for i in range(4):
transposed2_row=[]
for row in matrix:
transposed2_row.append(row[i])
transposed2.append(transposed2_row)
# 但在实际应用中,最好用内只函数代替复杂的流程语句。此时zip()函数更好用
list(zip(*matrix))