Python中嵌套列表增加元素小结

简介: 在实现杨辉三角案例过程中,将每一层的数存为一个templist,并最终归结到一个大列表list中来保存。随着层数增加,则需要循环向列表list中增加元素templist。此时发现循环后消除templist也会改变list中的元素。为此做出相关的研究和探索,即python中将一个列表作为另一个嵌套列表的元素添加进去,但不能随着改变该列表而改变了嵌套列表。

目录

一、引言

二、列表元素操作

三、相关问题分析

3.1预期

3.2现象

四、解决方法

4.1对于复制赋值,保持原列表不改变的方法:

4.2那么对于嵌套类型的列表,该如何增加元素呢


一、引言


   在实现杨辉三角案例过程中,将每一层的数存为一个templist,并最终归结到一个大列表list中来保存。随着层数增加,则需要循环向列表list中增加元素templist。此时发现循环后消除templist也会改变list中的元素。为此做出相关的研究和探索,即python中将一个列表作为另一个嵌套列表的元素添加进去,但不能随着改变该列表而改变了嵌套列表。


二、列表元素操作


python列表函数

序号 函数
1 len(list)
列表元素个数
2 max(list)
返回列表元素最大值
3 min(list)
返回列表元素最小值
4 list(seq)
将元组转换为列表

python列表方法

序号 方法
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列表的改变而改变。

目录
相关文章
|
3天前
|
Python
【Python操作基础】——列表操作
【Python操作基础】——列表操作
|
3天前
|
索引 Python
Python中的列表、元组和字典各具特色
【5月更文挑战第11天】Python中的列表、元组和字典各具特色:列表是可变的,元组不可变,字典亦可变;列表和元组有序,字典无序(但在Python 3.7+保持插入顺序);元素类型上,列表和元组元素任意,字典需键不可变;列表用方括号[],元组用圆括号(),字典用大括号{}表示。列表不适合作字典键,元组可以。选择数据结构应依据实际需求。
10 2
|
7天前
|
BI Python
深入浅出:讲解Python中的列表推导式
深入浅出:讲解Python中的列表推导式
|
7天前
|
监控 PHP Python
1688快速获取整店铺列表 采集接口php Python
在电子商务的浪潮中,1688平台作为中国领先的批发交易平台,为广大商家提供了一个展示和销售商品的广阔舞台;然而,要在众多店铺中脱颖而出,快速获取商品列表并进行有效营销是关键。
|
8天前
|
算法 Python
Python中不使用sort对列表排序的技术
Python中不使用sort对列表排序的技术
18 1
|
8天前
|
Python
【Python 基础】列表(list)和元组(tuple)有什么区别?
【5月更文挑战第6天】【Python 基础】列表(list)和元组(tuple)有什么区别?
|
8天前
|
算法 Python
从原始边列表到邻接矩阵:使用Python构建图的表示
从原始边列表到邻接矩阵:使用Python构建图的表示
10 0
|
测试技术 Android开发 Python
|
开发框架 测试技术 索引
Python+Appium自动化测试(5)-appium元素定位常用方法(二)
appium继承了selenium框架中webdriver提供的元素定位方法,接下介绍几种常用的方法。
Python+Appium自动化测试(5)-appium元素定位常用方法(二)
|
测试技术 开发工具 Android开发
Python+Appium自动化测试(5)-appium元素定位常用方法(一)
对于Android而言,查找appUI界面元素属性的工具有三种:appium desktop,uiautomatorviewer.bat,weditor。之前已经介绍过了weditor的使用,这里我将通过使用uiautomatorview工具查看元素的属性值,来介绍Android app通过appium进行元素定位常用的几种方法。
Python+Appium自动化测试(5)-appium元素定位常用方法(一)