多语言展示
当前在线:541今日阅读:19今日分享:20

Python3.7 列表中有关增删改查的语句和函数

这里用的是Anaconda3-5.2.0-Windows-x86_64编译器。为了写的方便,我们打开“Tools” →“Python Console”,先定义两个数组a和b。2python列表怎样增删改查
工具/原料
1

电脑

2

Python3.6

3

PyCharm

1.增加函数
1

首先我们来看一个“增”的操作,使用append函数增加元素,例如我们想在数组后加一个“5”。a= [1,2,3,4]a.append(5)# 列表现在变为[1,2,3,4,5]

2

另一种增加数组长度的方法就是合并数组了。a= [1,2,3,4]b=[5]方法1 利用加号直接连接: a+b# [1, 2, 3, 4, 5]方法2 利用extand()函数合并两个数组:a= [1,2,3,4]b=[5]a.extend(b)# [1, 2, 3, 4, 5]

3

extend与append方法的相似之处在于都是将新接收到参数放置到已有列表的后面。这里分析一下append和extand的用法区别。一、list.append(object); 向列表中添加一个对象,这个对象可以是任意数据类型的参数,并且简单地追加到list尾部。而整个列表只增长了一个单位。例如a= [1,2,3,4]b=[5,6]a.append(b)#  [1, 2, 3, 4, [5, 6]]二、objectlist.extend(sequence) 而extend方法只能接收list的每个元素seq,且把这个list中的每个元素添加到原list中。而整个列表增长了b列表中所有元素个数个单位。a= [1,2,3,4]b=[5,6]a.extend(b) #[1, 2, 3, 4, 5, 6]

2.删除语句和函数
1

删除顶端数值 list.pop([index=-1])a= [1,2,3,4]li.pop()  # => [1,2,3]

2

用del 语句删除指定下标的数值 a= [1,2,3,4]del a[3]# =>[2,3,4,2]del删除的是变量,而不是数据。

3

用remove函数,删除给出的数字,但只会删除第一个匹配项list.remove(obj)a= [1,2,3,4,2]a.remove(2)   =>[2,3,4,2]

4

这里要强调一下remove遍历列表删除时,即与for语句搭配时需要注意的问题:来看一串从0-30选出可以4整除的代码a=list(range(30))for i in a:    if i % 4!= 0:        a.remove(i)        print(a)按照平常理解,应该删除所有内容,可从下面的结果发现,2,6,10都保留下来了。[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

5

当你执行第一个的时候,a 里面的第一个数是0 现在不符合规则,然后不删除。进行下一个循环,第二个数是1, 符合规则,把a里的1删除,现在a的表成了[0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]然该第二个了,因为for in是按照下标取值的,可是问题是现在原先列表的第二号的索引已经删掉了。现在那么第2号位就成了3,而不是2,这个时候就会把2跳过没判断,以后的类似,而remove是对值进行操作,那么你i传到下面什么值,它就会删除什么值。在第三次循环,4被跳过。[0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]在第四次循环,6被跳过,因此为什么偶数都被留下了。[0, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]参考:https://blog.csdn.net/guan666/article/details/71511948

6

那么如何解决这个问题呢?复制一个同样列表的b。将循环的指针依据查询b,指向的数字这样就不会跟着变了。a=range(30)b=list(a)for i in a:    if i % 4!= 0:        b.remove(i)        print(b)

7

这里还得讲一下浅拷贝和深拷贝。如果我们将list写到a,然后直接让a赋值给b,如下。a=list(range(30))b=afor i in a:    if i % 4!= 0:        b.remove(i)        print(b)那么结果还是[0, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]这是因为这样的浅拷贝,在复制的时候只增加了一个指针,没有给其分配了内存空间,即你原来有一个a列表,你这个a里的值都有指向自己的指针,而且也有自己的内存空间a1。当浅拷贝a列表的时候得到一个b,这个b里的值都有指向自己的指针,但是他的的内存空间还是a1;这个时候你对无论是a还是b进行操作,都会改变内存空间a1里的值。

8

一种方法是还是在赋值的同时改变数据类型,这样就会顺带要求计算机分配给b自己的内存空间b。a=list(range(30))b=list(a)for i in a:   if i % 4!= 0:       b.remove(i)       print(b)

9

另一种方法是使用深拷贝。在复制的时候不但增加了一个指针,而且还给其分配了内存空间,即你原来有一个a列表,你这个a里的值都有指向自己的指针,而且也有自己的内存空间a1,当深拷贝a列表的时候得到一个A,这个A里的值都有指向自己的指针,而且也有自己的内存空间A1;那么你再对原来的进行操作的时候可以去a里去寻找,在A里进行操作,由于都有自己的独立的内存空间,那么不会相互影响。就可以避免遗漏值,出现错误。不过它需要调用一个copy库。import copya=list(range(30))b=copy.deepcopy(a)for i in a:    if i % 4!= 0:        b.remove(i)        print(b)

3.“改”插入函数

list.insert(index, obj)index -- 对象 obj 需要插入的索引位置。obj -- 要插入列表中的对象。a= [1,2,3,4]b=[5,6]这里示范一下错误的写法,深入理解一下:a.insert(5, b)原本应该些4,b,但是如果不小心输入比4大的数字,python会自动更正,放入最前的空位置中去。结果是类似append  往后添加#  [1, 2, 3, 4, [5, 6]]当插入到中间去时,都要将插入位置的元素向后移动才能在相应的位置插入元素。

4.查询函数

用index查询列表中找出某个值第一个匹配项的索引位置。list.index(obj)a= [1,2,3,4,2]a.index(2)

推荐信息