标签:嵌套列表 对象 就是 索引 clear int 括号 items 结果
一、python数据结构:
1)List:可更改的类型,下面是List的一些方法:
1、list.append(x):把一个元素添加到列表的结尾,a[len(a):] = [x]。
2、list.extend(L):通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。
3、list.insert(i,x):在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如a.insert(0,x)会插入到整个列表之前,而a.insert(len(a), x)相当于a.append(x)。
4、list.remove(x):删除列表中值为 x 的第一个匹配元素。如果没有这样的元素,就会返回一个错误。
5、list.pop([i]):从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中i两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
6、list.clear():移除列表中的所有项,等于del a[:]。
7、list.index(x):返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
8、list.count(x):返回x在列表中出现的次数。
9、list.sort():对列表中的元素进行排序(默认从小到大排序)。
10、list.reverse():倒排列表中的元素。
11、list.copy():返回列表的浅复制,等于a[:]。
备注:
1、python浅复制和深复制的区别:对于可更改类型(复合型对象),复制有分浅复制和深复制两种类型。
①浅复制(list.copy()):意味着新建一个对象B,但是其子元素仍然指向对应原对象A的子对象(也就是说,A中原有的数据改变,B也会跟着改变)。同时,只会对原对象A这一层进行拷贝,而不会递归的对子对象也进行拷贝(类似A新增操作就不会对B起作用)。
举个例子: A = [[1,2],[2,3,4]]
B = A.copy()
print(B) #输出:[[1,2],[2,3,4]]
C = [1,3,4]
A.append(C)
print(A) #输出:[[1,2],[2,3,4],[1,3,4]]
print(B) #输出:[[1,2],[2,3,4]]
A[0][0] = ‘a‘
print(A) #输出:[[‘a‘,2],[2,3,4],[1,3,4]]
print(B) #输出:[[‘a‘,2],[2,3,4],[1,3,4]]
总结:也就是说,对对象A进行浅复制之后得到的B对象,对原本复制的内容,A更改则B跟着改,但是自浅复制完后,A对除原有数据外进行操作,例如增加列表元素,都不会对B造成影响。
②深复制:意味着新建一个对象B,但是其子元素不再指向对应原对象A的子对象,类似于克隆出来的完全独立体。(也就是说,A中原有的数据 改变,B不会跟着改变)。自然往A中的其他任何操作,都应该不会对B有任何影响的了。
重用上面例子的数据举例:
D = copy.deepcopy(A)
print(D) #[[1,2],[2,3,4]]
A[0][0] = ‘a‘
print(A) #输出:[[‘a‘,2],[2,3,4],[1,3,4]]
print(B) #输出:[[‘1‘,2],[2,3,4],[1,3,4]]数据不会跟着改变
2、用append()和不指定索引的pop()方法可以实现列表充当堆栈的进出操作。
3、列表推导式:每个列表推导式都在for之后跟一个表达式,然后又零到多个for/if语句,返回结果是一个根据表达从其后的for和if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。举个例子说明一下怎么用即可:
>>> A = [1,2,3]
>>> [10*i for i in A] #输出:[10,20,30]
>>> [[i, i**2] for i in A] #输出:[[1, 1],[2, 4],[3,9]]
2)嵌套列表解析
这部分就讲一个矩阵行列倒置:
eg:
>>> A = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
>>> [[row[i] for row in A] for i in range(4)] #进行行列倒置
>>> print(A)#输出:[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
3)遍历技巧
1、字典遍历时,关键字和对应的值可以使用items()方法同时解读出来:
eg:>>> A = {‘a‘: ‘b‘, ‘c‘: ‘d‘}
>>> for i, j in A.items():
>>> print(k, v)
2、序列遍历时,索引位置和对应值可以使用enumerate()函数同时得到:
eg:>>> for i, j in enumerate([‘a‘, ‘b‘, ‘c‘]):
>>> print(i, v)
3、同时遍历两个或者更多的序列时,可以使用zip()组合:
eg:>>> A = [‘name‘, ‘phone‘, ‘school‘]
>>> B = [‘yangrongkuan‘,‘18813299877‘,‘scnu‘]
>>> for i,j in zip(A, B):
>>> print(‘What is your {0}? It is {1}.‘.format(i, j))
4、反向遍历一个序列:
eg:>>> for i in reverse(range(1,10,2)):
>>> print(i)
5、要按顺序遍历一个序列,可以使用sorted()函数返回一个已排序的序列,并不修改原值:
eg:>>> basket = [‘apple‘, ‘orange‘, ‘apple‘, ‘pear‘, ‘orange‘, ‘banana‘]
>>> for i in sorted(set(basket)):#不用指定按照什么顺序进行排序的
>>> print(i)
标签:嵌套列表 对象 就是 索引 clear int 括号 items 结果
原文地址:https://www.cnblogs.com/yangrongkuan/p/12076781.html