Python中嵌套列表增加元素小结
Posted nanke_yh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中嵌套列表增加元素小结相关的知识,希望对你有一定的参考价值。
目录
一、引言
在实现杨辉三角案例过程中,将每一层的数存为一个templist,并最终归结到一个大列表list中来保存。随着层数增加,则需要循环向列表list中增加元素templist。此时发现循环后消除templist也会改变list中的元素。为此做出相关的研究和探索,即python中将一个列表作为另一个嵌套列表的元素添加进去,但不能随着改变该列表而改变了嵌套列表。
二、列表元素操作
序号 | 函数 |
1 | len(list) 列表元素个数 |
2 | max(list) 返回列表元素最大值 |
3 | min(list) 返回列表元素最小值 |
4 | list(seq) 将元组转换为列表 |
序号 | 方法 |
---|---|
1 | list.append(obj) 在列表末尾添加新的对象 |
2 | list.count(obj) 统计某个元素在列表中出现的次数 |
3 | list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
4 | list.index(obj) 从列表中找出某个值第一个匹配项的索引位置 |
5 | list.insert(index, obj) 将对象插入列表 |
6 | list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
7 | list.remove(obj) 移除列表中某个值的第一个匹配项 |
8 | list.reverse() 反向列表中元素 |
9 | list.sort( key=None, reverse=False) 对原列表进行排序 |
10 | list.clear() 清空列表 |
11 | list.copy() 复制列表 |
三、相关问题分析
3.1预期
>>> mylist2 = [1,2,1]
>>> mylist1 = [[1],[1,1]]
>>> #预期是mylist1[[1],[1,1],[1,2,1]],并在之后需清空mylist2,而mylist1不改变
3.2现象
1、使用append添加,在使用clear去清除mylist2,会发现mylist1也随之改变:
>>> mylist1.append(mylist2)
>>> print(mylist1)
[[1], [1, 1], [1, 2, 1]]
>>> mylist2.clear()
>>> print(mylist1)
[[1], [1, 1], []]
2、使用copy呢:是直接赋值,而不是添加元素
>>> mylist1 = mylist2.copy()
>>> print(mylist1)
[1, 2, 1]
3、直接加:看起来相似,实际不对,没有增加元素个数,而是将mylist1作为整体存为一个元素。
>>> mylist1 = [mylist1,mylist2]
>>> print(mylist1)
[[[1], [1, 1]], [1, 2, 1]]
4、综合现象:
1)、通过 clear() 方法,remove() 方法,pop() 方法,append() 方法等改变列表的,相应的已经赋值给其它变量的列表也会被清空。
2)、使用del将直接删除该变量,使得下次无定义
3)、当列表list1使用copy()方法被复制到另一个列表list2时,使用clear()方法清空原列表list1,列表list2不会被清空,即不会影响复制列表。(直接赋值操作)
四、解决方法
4.1对于复制赋值,保持原列表不改变的方法:
1、使用切片方法复制列表
cities1 = ["Guangzhou","Beijing","Shanghai","Nanjing"]
cities2 = cities1[:]
cities1.insert(1,"Xiamen")#改变cities2,而cities1不改变
2、使用copy函数复制列表
cities1 = ["Guangzhou","Beijing","Shanghai","Nanjing"]
cities2 = cities1.copy()
cities1.insert(1,"Xiamen")#改变cities2,而cities1不改变
3、使用for循环方法复制
cities1 = ["Guangzhou","Beijing","Shanghai","Nanjing"]
cities2 = [i for i in cities1]
cities2.append("Kunming")#改变cities2,而cities1不改变
4.2那么对于嵌套类型的列表,该如何增加元素呢
这里借鉴以上,将主要使用切片方法去赋值,并用插入函数增加嵌套列表元素:
>>> mylist1 = [[1],[1,1]]
>>> mylist2 = [1,2,1]
>>> mylist1.insert(2,mylist2[:])
>>> print(mylist1)
[[1], [1, 1], [1, 2, 1]]
>>> mylist2.clear()
>>> print(mylist2)
[]
>>> print(mylist1)
[[1], [1, 1], [1, 2, 1]]
>>>
如此,就可以实现上面嵌套列表mylist1元素的增加,mylist1不会因mylist2列表的改变而改变。
以上是关于Python中嵌套列表增加元素小结的主要内容,如果未能解决你的问题,请参考以下文章
p2·python中嵌套列表list元素输出·模块封装·发布上传(pigeon详细说)
Python代码阅读(第13篇):检测列表中的元素是否都一样