四、Python基本数据类型四:列表类型

·列表是Python中内置有序、可变序列,列表的所有元素放在一对中括号“[]”中,并使用逗号分隔开

·当列表元素增加或删除时,列表对象自动进行扩展或收缩内存,保证元素之间没有缝隙

·在Python中,一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、字符串等基本类型,甚至是列表、元组、字典、集合以及其他自定义类型的对象

1、列表的创建与删除

·使用方括号[]直接创建

list_a = ["String", 1, 'a', [1, 'b', 3]]
list_b = []  #创建空列表
print(list_a, '\n', list_b)
'''
输出结果:
['String', 1, 'a', [1, 'b', 3]] 
[]
'''

·使用list()函数创建

list_a = list(range(1, 26, 3))
list_b = list((1, 'a', "abc"))
list_c = list()  #创建空列表
list_d = list('Hello World')
print(list_a, '\n', list_b, '\n', list_c, '\n', list_d)
'''
输出结果:
[1, 4, 7, 10, 13, 16, 19, 22, 25] 
[1, 'a', 'abc'] 
[] 
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
'''

·使用del命令删除整个列表,如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。

del list_a
list_a
'''
输出结果:
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    list_a
NameError: name 'list_a' is not defined
'''

2、列表元素的增加

(1)使用‘+’运算符

list_a = [1, 2, 3]
list_a = list_a + [5]
print(list_a, '\n', list_b)
'''
输出结果:
[1, 2, 3]
[1, 2, 3, 5]
'''

·该方法创建了一个新列表,并将原列表中的元素和新元素依次复制到新列表的内存,由于涉及元素的复制,该操作速度较慢

(2)使用append(a)方法

list_a = list('Hello')
list_a.append('!')
list_a
'''
输出结果:
['H', 'e', 'l', 'l', 'o', '!']
'''

·append()实现的是在特定的列表最后添加一个元素,并且一次只能在列表最后添加一个元素。该方法为原地修改,即直接修改原列表,不产生新的列表,速度较快

(3)使用extend(a, b…)方法

list_a = [1, 2, 3]
list_a.extend('a', 4, 'abc')
'''
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    list_a.extend('a', 4, 'abc')
TypeError: extend() takes exactly one argument (3 given)
'''
list_a.extend(['a', 4, 'abc'])
list_a
'''
输出结果:
[1, 2, 3, 'a', 4, 'abc']
'''

·extend()实现的是对于特定列表的扩展和增长,可以在列表的最后一次性添加多个元素,该方法为原地修改,不产生新的列表

(4)使用insert(a, b)方法

list_a = ['a', 1, 2, 'b']
list_a.insert(3, 3)
list_a
'''
输出结果:
['a', 1, 2, 3, 'b']
'''

·insert(a, b)实现的是在列表的指定位置a处插入元素b,但由于列表的自动内存管理功能,insert()方法会引起插入位置之后所有元素的移动,这会影响处理速度

(5)使用‘*’方法

list_a = [[1, 2, 3] * 2] * 3
list_a
'''
[[1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3]]
'''
list_a[0][0] = 'a'
list_a
'''
[['a', 2, 3, 1, 2, 3], ['a', 2, 3, 1, 2, 3], ['a', 2, 3, 1, 2, 3]]
'''

·当使用*运算符将包含列表的列表重复并创建新列表时,并不是复制子列表值,而是复制已有元素的引用。因此,当修改其中一个值时,相应的引用也会被修改

3、列表元素的删除

(1)使用del m[n]方法

list_a = [1, 2, 3, 4]
del list_a[1]
list_a
#[1, 3, 4]

·删除列表m指定位置n上的元素

(2)使用pop(n)方法

list_a = [1, 2, 3, 4]
list_a.pop()
#4
list_a.pop(0)
#1
list_a
#[2, 3]

·删除并返回列表指定位置(默认为最后一个)上的元素,如果给定的索引超出了列表的范围则抛出异常

(3)使用remove(a)方法

list_a = ['1', 'a', 'b', 1, 2]
list_a.remove('1')
list_a
#['a', 'b', 1, 2]
list_a.remove('1')
'''
Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    list_a.remove('1')
ValueError: list.remove(x): x not in list
'''

·删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常

4、列表元素的访问

(1)使用下标直接访问,如果指定下标不存在,则抛出异常

(2)使用index()方法获取指定元素首次出现的下标,若列表对象中不存在指定元素,则抛出异常

list_a = [[1, 2, 3] * 2] * 3
list_a.index(3)
'''
Traceback (most recent call last):
  File "<pyshell#61>", line 1, in <module>
    list_a.index(3)
ValueError: 3 is not in list
'''
list_a = [1, 2, 3, 4, 'a', 'b']
list_a.index(3)
#2

(3)使用count()方法统计指定元素在列表对象中出现的次数

list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3]
list_a.count(2)
#3
list_a.count(0)
#0

(4)使用in关键字来判断一个值是否存在于列表中,返回结果为“True”或“False

list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3]
4 in list_a
#False
3 in list_a
#True
0 not in list_a
#True

5、列表切片

(1)列表切片就是指将列表里面的一些列元素(不仅仅是某一个元素)进行获取或者得到

(2)M = N[A:B:C] 表示将N列表里从索引号位置为A开始的元素到B-1处且步长为C的元素的列表获取赋给M

list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3]
list_b = list_a[0:6:2]
list_b
#[1, 3, 3]

(3)切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更强的健壮性

list_a = [1, 2, 3]
list_b = list_a[2:6]
list_b
#[3]

(4)使用切片修改列表元素

·在尾部追加元素

list_a = [1, 2, 3]
list_a[len(list_a) : ] = [0]
list_a
#[1, 2, 3, 0]

·替换元素

list_a = [1, 2, 3, 4, 5, 6]
list_a[1:4] = ['a', 'b', 'c']
list_a
#[1, 'a', 'b', 'c', 5, 6]

·删除元素

list_a = [1, 2, 3, 4, 5, 6]
list_a[1:5] = []
list_a
#[1, 6]

·与del结合删除元素

list_a = [1, 2, 3, 4, 5, 6]
del list_a[1:5]
list_a
#[1, 6]

(5)赋值和切片

          

 

  

 

6、列表推导式

 aList = [x*x for x in range(10)]
相当于
>>> aList = []
>>> for x in range(10):
           aList.append(x*x)
也相当于
 aList = list(map(lambda x: x*x, range(10)))

7、列表函数&方法

序号

函数

1

cmp(list1, list2)
比较两个列表的元素

2

len(list)
列表元素个数

3

max(list)
返回列表元素最大值

4

min(list)
返回列表元素最小值

5

list(seq)
将元组转换为列表

6

list.append(obj)
在列表末尾添加新的对象

7

list.count(obj)
统计某个元素在列表中出现的次数

8

list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

9

list.index(obj)
从列表中找出某个值第一个匹配项的索引位置

10

list.insert(index, obj)
将对象插入列表

11

list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

12

list.remove(obj)
移除列表中某个值的第一个匹配项

13

list.reverse()
反向列表中元素(在原列表上直接操作,不返回新的列表)

14

list.sort(cmp=None, key=None, reverse=False)
对原列表进行排序

posted @ 2020-07-30 16:29  爱喝奶茶的CC怪  阅读(654)  评论(0)    收藏  举报