Python之列表和元组的基本操作(超详细)

一、操作列表元素

列表中的元素是有序存放的,因此可以直接通过索引来访问列表元素。同时列表中的元素是可变的。即不仅列表中的元素值可以修改,列表中的元素个数也是可变的。因此列表中的元素支持修改、添加和删除操作。

1.1 修改元素

格式:列表名【索引】= 新值

 1.2 增加元素

1.2.1 append()方法

 append()方法是列表专属的方法之一,用来在指定的列表尾部,即当前最后一个元素的后面,追加指定新元素。

语法格式:列表名.append(新元素)

1.2.2 insert()方法 

insert()方法允许为新增加的元素指定插入的位置,其中位置用索引表示。

 语法格式为:列表名.insert(索引,新元素)

>>> guests = ['张三','李四','王五','小阿丁']
>>> guests.insert(0,'小红')
>>> guests
['小红', '张三', '李四', '王五', '小阿丁']
>>> len(guests)
5

注意:列表每次增加的元素可以是任何类型的。 

>>> play1 = ['小阿丁',18]
>>> play1
['小阿丁', 18]
>>> play1.append(20)
>>> play1
['小阿丁', 18, 20]
>>> play1.insert(0,'小红')
>>> play1
['小红', '小阿丁', 18, 20]

1.3 删除元素 

 1.3.1 del命令

语法格式:del 列表名【索引】 

>>> guests
['小红', '张三', '李四', '王五', '小阿丁']
>>> del guests[0]
>>> guests
['张三', '李四', '王五', '小阿丁']

 1.3.2 pop()方法

 语法格式:列表名.pop(索引)      #当缺省指定索引的时候,默认删除最后一个元素

>>> guests
['张三', '李四', '王五', '小阿丁']
>>> guests.pop(1)
'李四'
>>> guests
['张三', '王五', '小阿丁']
>>> guests.pop()
'小阿丁'
>>> guests.pop()
'王五'

 

 可以看出pop()不仅删除了列表中指定元素,而且返回了被删除的指定元素,这可以供后续使用。

1.3.3 remove()方法 

 语法格式:列表名.remove(元素值)

>>> guests
['小红', '张三', '李四', '张三', '小阿丁']
>>> guests.remove('李四')
>>> guests
['小红', '张三', '张三', '小阿丁']
>>> guests.remove('张三')
>>> guests
['小红', '张三', '小阿丁']

 可以看出,当列表中有相同值时,remove()方法删除的是列表中排在最前面的待删除的元素。

二、其他常用操作 

2.1 常用函数 

len()           #统计和返回指定列表的长度
in()   not in()       #判断指定元素是否在列表中
index()         #在列表中那个查找指定的元素,若存在则返回指定元素在列表中的索引,若存在多个则返回最小的,若不存在会报错
count()         #统计并返回列表中指定元素的个数
>>> guests = ['张三','李四','王五','小阿丁']
>>> '小阿丁' in guests
True
>>> '小红' in guests
False
>>> '小红' not in guests
True
>>> 
>>> len(guests)
4
>>> guests.index('小阿丁')
3
>>> guests.count('小阿丁')
1
>>> guests.count('小红')
0

2.2 操作列表函数 

sort()           #列表元素从小到大升序排序,改变了源列表的元素的顺序
sorted()         #列表元素从小到大升序排序,生成排序后的副本,不改变原列表的顺序

 注意:sort()方法排序是基于ord()函数得到的编码值进行的。对于数字和英文字符排序,结果是确定的,但是处理中文的时候就有些复杂,因为中文通常会有拼音和笔画两种排序方式,而不同的字符集或采用拼音排序,或采用笔画排序,或采用偏旁部首排序,或混合多种排序方式,从而使得sort()方法对中文的排序结果和预判结果发生偏差。至于如何解决,我会在后面给出。

同时sort()不仅可以升序也可以降序,但是需要增加一个参数,如下图:

sort()方法格式:列表.sort() 

>>> nums = [9,3,8,2,1]
>>> nums.sort()
>>> nums
[1, 2, 3, 8, 9]
>>> nums.sort(reverse = True)
>>> nums
[9, 8, 3, 2, 1]

sorted()函数语法格式:sorted(列表,reverse) 

>>> nums = [9,3,5,1,2,18]
>>> nums
[9, 3, 5, 1, 2, 18]
>>> sorted(nums,reverse = False)
[1, 2, 3, 5, 9, 18]
>>> sorted(nums,reverse = True)
[18, 9, 5, 3, 2, 1]

可以看出sorted()函数只生成排序后的列表副本,不改变原列表中元素的顺序。如果想保存排序后的列表,可以定义一个新的列表将其保存。

三、列表的扩充、复制和删除

3.1 列表的扩充 

3.1.1 “+”运算 

 “+”运算可以将两个列表“加”起来,生成一个新的列表,但是原来的列表并没有发生变化。

>>> list1 = ['小红','小王','小兰']
>>> list1
['小红', '小王', '小兰']
>>> list2 = ['张三','李四','王五','小阿丁']
>>> list2
['张三', '李四', '王五', '小阿丁']
>>> list1 + list2
['小红', '小王', '小兰', '张三', '李四', '王五', '小阿丁']
>>> list1
['小红', '小王', '小兰']
>>> list2
['张三', '李四', '王五', '小阿丁']

3.1.2 extend() 方法 

 extend()方法不同于“+”方法,因为“+”必须通过赋值语句才能将结果写入新的列表中,而extend()方法可以直接将新的列表添加至原列表之后。

语法格式为:列表.extend(新列表)

>>> list1
['小红', '小王', '小兰']
>>> list2
['张三', '李四', '王五', '小阿丁']
>>> list1.extend(list2)
>>> list1
['小红', '小王', '小兰', '张三', '李四', '王五', '小阿丁']
>>> list2
['张三', '李四', '王五', '小阿丁']

3.1.3 “*”运算 

 列表的乘法运算是指将列表中的元素重复多遍。

语法格式:列表*n

>>> list2
['张三', '李四', '王五', '小阿丁']
>>> list2 * 3
['张三', '李四', '王五', '小阿丁', '张三', '李四', '王五', '小阿丁', '张三', '李四', '王五', '小阿丁']

  

 3.2 列表的复制

 3.2.1 copy() 方法

>>> list2
['张三', '李四', '王五', '小阿丁']
>>> listscopy = list2.copy()
>>> listscopy
['张三', '李四', '王五', '小阿丁']

3.2.2 列表之间的赋值 

>>> list2
['张三', '李四', '王五', '小阿丁']
>>> list1 = list2
>>> list1
['张三', '李四', '王五', '小阿丁']

做到这,似乎这两种方法没有任何区别,都能实现列表的复制,那到底有什么区别呢?继续往下进行删除元素的尝试。

>>> list1
['张三', '李四', '王五', '小阿丁']
>>> list1copy = list1.copy()
>>> list1copy
['张三', '李四', '王五', '小阿丁']
>>> del list1copy[0]
>>> list1copy
['李四', '王五', '小阿丁']
>>> list1
['张三', '李四', '王五', '小阿丁']

通过copy()方法得到的新列表在执行删除一个元素的时候,该元素只是从复制的列表中删除,原列表并没有发生任何变化。

>>> list1
['张三', '李四', '王五', '小阿丁']
>>> list2 = list1
>>> list2
['张三', '李四', '王五', '小阿丁']
>>> del list2[0]
>>> list2
['李四', '王五', '小阿丁']
>>> list1
['李四', '王五', '小阿丁']

但是使用赋值得到的新列表在执行删除一个元素的时候,该元素不仅在复制列表中被删除,在原列表中也被删除。

这说明,列表的copy()方法会生成一个原列表的备份,并将该备份赋值给新列表,这被称为“深拷贝”。而直接的列表赋值,仅仅是让原列表多了一个新的名字,所谓的“新”列表和原列表共享原来的列表内容,这被称为“浅拷贝”。 

3.2.3 列表的切片实现复制

 倘若想复制列表的一部分,那就可以使用切片。

>>> list1
['李四', '王五', '小阿丁']
>>> list3 = list1[1:3]
>>> list3
['王五', '小阿丁']

这也是一种“深拷贝”,读者可以自己上机实验。

3.3 列表的删除 

 语法格式:del 列表名

注意del 也可以通过删除所有元素达到清空列表的作用,原列表仍保存,只不过是一个空列表。

>>> list2
['李四', '王五', '小阿丁']
>>> del list2[:]
>>> list2
[]

四、元组

特别注意:元组的元素是不能修改的,可以将元组理解为“不能修改的列表”。 

 元组是一种特殊的列表,很多特性和列表相似。

4.1 转换函数 

 4.1.1 元组与列表之间的转换

 tuple()函数用来将列表转换为元组,list()函数用来将元组转换为列表。

>>> tup1 = ("小阿丁","女",18)
>>> tup1 
('小阿丁', '女', 18)
>>> list1 = list(tup1)
>>> list1 
['小阿丁', '女', 18]
>>> list2 = ['小阿丁','女',20]
>>> list2
['小阿丁', '女', 20]
>>> tup2 = tuple(list2)
>>> tup2
('小阿丁', '女', 20)

4.1.2 字符串与列表之间的转换 

>>> name = '小阿丁,小红'
>>> list1 = list(name)
>>> list1 
['小', '阿', '丁', ',', '小', '红']

4.1.3 split()方法  

split()方法是处理字符串的方法,用来根据指定的分隔符拆分字符串,并生成列表。

语法格式为:字符串.split(分隔符)      #分隔符如果缺省的话,默认按照空格拆分字符串

>>> sentence = 'I want to be split by spcaes.'
>>> name = '小阿丁,小红'
>>> sentencelist = sentence.split()
>>> sentencelist
['I', 'want', 'to', 'be', 'split', 'by', 'spcaes.']
>>> namelist = name.split(',')
>>> namelist
['小阿丁', '小红']

猜你喜欢

转载自blog.csdn.net/m0_51769031/article/details/127332814