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列表的改变而改变。

目录
相关文章
|
8月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
481 2
|
8月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
624 0
|
8月前
|
开发者 Python
Python列表推导式:优雅与效率的完美结合
Python列表推导式:优雅与效率的完美结合
550 116
|
8月前
|
大数据 开发者 Python
Python列表推导式:简洁与高效的艺术
Python列表推导式:简洁与高效的艺术
486 109
|
8月前
|
Python
Python列表推导式:简洁与高效的艺术
Python列表推导式:简洁与高效的艺术
571 119
|
8月前
|
Python
Python列表推导式:简洁与高效的艺术
Python列表推导式:简洁与高效的艺术
|
8月前
|
索引 Python
Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧
本文通过生动的“嫁接”比喻,讲解Python列表切片赋值操作。切片可修改原列表内容,实现头部、尾部或中间元素替换,支持不等长赋值,灵活实现列表结构更新。
419 1
|
8月前
|
索引 Python
098-python列表_切片_slice_开始_结束
本文介绍了Python中列表的切片(slice)操作,通过“前闭后开”原则截取列表片段,支持正负索引、省略端点等用法,并结合生活实例(如切面包、直播切片)帮助理解。切片不改变原列表,返回新列表。
440 4
|
存储 人工智能 索引
Python数据结构:列表、元组、字典、集合
Python 中的列表、元组、字典和集合是常用数据结构。列表(List)是有序可变集合,支持增删改查操作;元组(Tuple)与列表类似但不可变,适合存储固定数据;字典(Dictionary)以键值对形式存储,无序可变,便于快速查找和修改;集合(Set)为无序不重复集合,支持高效集合运算如并集、交集等。根据需求选择合适的数据结构,可提升代码效率与可读性。
1153 1
|
安全 数据处理 索引
深入探讨 Python 列表与元组:操作技巧、性能特性与适用场景
Python 列表和元组是两种强大且常用的数据结构,各自具有独特的特性和适用场景。通过对它们的深入理解和熟练应用,可以显著提高编程效率和代码质量。无论是在数据处理、函数参数传递还是多线程环境中,合理选择和使用列表与元组都能够使得代码更加简洁、高效和安全。
474 9

推荐镜像

更多