Python数据类型之列表

列表类型(list)

1. 列表介绍

列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。

1.1 定义方式

1
2
3
4
5
6
7
8
9
10
11
# 定义:[]内可以有多个任意类型的值,逗号分隔

# 定义方法1
>>> l=['apple','banana','peach']
>>> print(l)
['apple', 'banana', 'peach']

# 定义方法2
>>> l=list(['apple','banana','peach'])
>>> print(l)
['apple', 'banana', 'peach']

★2. 常用列表方法

2.1 list[index] 访问列表中的值

语法说明

使用下标索引来访问列表中的值,下标从0开始计数

1
2
3
4
# 通过下标访问列表中的值,下标从0开始计数
>>> list1 = ['Google', 'Facebook', 'Baidu', 'Apple']
>>> list1[0]
'Google'

2.2 list[index_start:index_end] 切片:取多个元素

语法说明

使用方括号的形式截取字符

1
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
30
31
32
33
34
35
36
37
38
39
40
41
# 通过[]索引截取列表中的元素

# 取下标1至下标4之间的数字,包括1,不包括4
>>> l = ["A","B","C","D","E","F"]
>>> l[1:4]
['B', 'C', 'D']

# 取下标1至-1的值,不包括-1
>>> l = ["A","B","C","D","E","F"]
>>> l[1:-1]
['B', 'C', 'D', 'E']

# 取下标0至3的值
>>> l = ["A","B","C","D","E","F"]
>>> l[0:3]
['A', 'B', 'C']

# 如果是从头取,则和上面例子相同,取下标0至3的值
>>> l = ["A","B","C","D","E","F"]
>>> l[:3]
['A', 'B', 'C']

# 如果想取最后一个,必须不能写-1,只能这么写
>>> l = ["A","B","C","D","E","F"]
>>> l[3:]
['D', 'E', 'F']

# 如果不想取最后一个,则要这样写,这样-1就不会被包含了
>>> l = ["A","B","C","D","E","F"]
>>> l[3:-1]
['D', 'E']

# 后面的2是代表,每隔一个元素,就取一个
>>> l = ["A","B","C","D","E","F"]
>>> l[0::2]
['A', 'C', 'E']

# 后面的2是代表,每隔一个元素,就取一个
>>> l = ["A","B","C","D","E","F"]
>>> l[::2]
['A', 'C', 'E']

2.3 append() 列表追加

语法说明

list.append(obj)

参数说明

  • obj – 添加到列表末尾的对象。

返回值

该方法无返回值,但是会修改原来的列表。

1
2
3
4
5
6
# append()对列表进行追加原色

>>> l=["Google", "Facebook", "Taobao"]
>>> l.append("Baidu")
>>> list1
["Google", "Facebook", "Taobao","Baidu"]

2.4 insert() 列表元素插入

语法说明

list.insert(index, obj)

参数说明

  • index – 对象obj需要插入的索引位置。
  • obj – 要插入列表中的对象。

返回值

该方法没有返回值,但会在列表指定位置插入对象。

1
2
3
4
5
6
# insert() 将指定对象插入列表的指定位置。

>>> l=["Google", "Facebook", "Taobao"]
>>> l.insert(1, "Baidu")
>>> l
["Google", "Baidu", "Facebook", "Taobao"]

2.5 列表修改

语法说明

list[index] = new_obj

参数说明

  • index – 对象new_obj需要写入的索引位置。

返回值

该方法没有返回值,但会在列表指定位置更新对象。

1
2
3
4
5
6
# 将新对象赋值到指定位置

>>> l=["Google", "Facebook", "Taobao"]
>>> l[1] = "Baidu"
>>> l
["Google", "Baidu", "Taobao"]

2.6 列表元素删除

语法说明

del list[index]
list.remove(obj)
list.pop()

参数说明

  • index – 列表的索引位置。
  • obj – 列表中的对象。

返回值

以上三种方法没有返回值,但会更新列表对元素对象,将指定元素删除

  • 2.6.1 del list[index]

    1
    2
    3
    4
    5
    6
    # del list[index] 删除列表指定位置的元素

    >>> l=["Google", "Facebook", "Baidu", "Taobao"]
    >>> del l[1]
    >>> l
    ["Google","Baidu", "Taobao"]
  • 2.6.2 list.remove(obj)

    1
    2
    3
    4
    5
    6
    # list.remove(obj) 删除列表指定对象

    >>> l=["Google", "Facebook", "Baidu", "Taobao"]
    >>> l.remove("Facebook")
    >>> l
    ["Google","Baidu", "Taobao"]
  • 2.6.3 list.pop()

    1
    2
    3
    4
    5
    6
    # list.pop() 删除列表中最后一个对象

    >>> l=["Google", "Facebook", "Baidu", "Taobao"]
    >>> l.pop()
    >>> l
    ["Google", "Facebook", "Baidu"]

2.7 extend() 列表扩展元素

语法说明

list.extend(seq)

参数说明

  • seq – 元素列表。

返回值

该方法没有返回值,但会在已存在的列表中添加新的列表内容。

1
2
3
4
5
6
7
8
# extend()用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

# 将由0至4的新列表l2扩展到l1列表最后
>>> l1 = ["Google", "Facebook", "Taobao"]
>>> l2=list(range(5))
>>> l1.extend(l2)
>>> l1
["Google", "Facebook", "Taobao", 0, 1, 2, 3, 4]

2.8 count() 统计列表中某个元素出现的个数

语法说明

list.count(obj)

参数说明

  • obj – 列表中统计的对象。

返回值

返回元素在列表中出现的次数。

1
2
3
4
5
6
7
8
9
# count()用于统计某个元素在列表中出现的次数。

>>> l=["Google", "Facebook", "Taobao", "Baidu", "Google"]
>>> l.count("Google")
2

>>> l=["Google", "Facebook", "Taobao", "Baidu", "Google"]
>>> l.count("Facebook")
1

2.9 sort() 列表排序

语法说明

list.sort([func])

参数说明

  • func – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。

返回值

该方法没有返回值,但是会对列表的对象进行排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
# sort()用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。

# 列表中的元素都是数字,进行排序
>>> l=[1,2,3,4,5,6,7,8,9]
>>> l.sort()
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9]

# 列表中的元素都是字符串,进行排序
>>> l=["Baidu","Google","Facebook","Taobao"]
>>> l.sort()
>>> l
['Baidu', 'Facebook', 'Google', 'Taobao']

2.10 reverse() 列表翻转

语法说明

list.reverse()

返回值

该方法没有返回值,但是会对列表的元素进行反向排序。

1
2
3
4
5
6
7
# reverse()用于反向列表中元素。

# 将列表中的元素反向排序至列表中
>>> l=["Baidu","Google","Facebook","Taobao"]
>>> l.reverse()
>>> l
['Taobao', 'Facebook', 'Google', 'Baidu']

2.11 index() 获取列表指定元素下标

语法说明

list.index(obj)

参数说明

  • obj – 查找的对象。

返回值

该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。

1
2
3
4
5
# index()用于从列表中找出某个值第一个匹配项的索引位置。

>>> l=["Baidu","Google","Facebook","Taobao"]
>>> l.index("Taobao")
3

☆2.12 copy() 浅拷贝 / copy.deepcopy() 深拷贝

语法说明
copy()

list.copy()

copy.deepcopy()

copy.deepcopy(origin_list)

参数说明

  • origin_list表示深拷贝所拷贝的原始列表

返回值

返回复制后的新列表。

  • 2.12.1 copy() 浅拷贝

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # copy()用于复制列表,类似于 a[:]

    # 将l1列表拷贝至l2列表中,l1与l2两列表元素相同
    >>> l1=["Google", "Facebook", "Baidu",["Apple","Banana","Peach"]]
    >>> l2 = l1.copy()
    >>> l2
    ['Google', 'Facebook', 'Baidu', ['Apple', 'Banana', 'Peach']]

    # 注意,上述例子中如果在l1原始列表进行更改,l2列表会随之改变,此即为浅拷贝
    >>> l1=["Google", "Facebook", "Baidu",["Apple","Banana","Peach"]]
    >>> l2 = l1.copy()
    >>> l2
    ['Google', 'Facebook', 'Baidu', ['Apple', 'Banana', 'Peach']]
    >>> l1[3].append("NewComer")
    >>> l1
    ['Google', 'Facebook', 'Baidu', ['Apple', 'Banana', 'Peach', 'NewComer']]
    >>> l2
    ['Google', 'Facebook', 'Baidu', ['Apple', 'Banana', 'Peach', 'NewComer']]
  • 2.12.2 copy.deepcopy() 深拷贝

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # copy.deepcopy()深拷贝,copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

    # 与浅拷贝不同,深拷贝的情况下,如果在l1原始列表进行更改,l2列表不会随之改变,此即为深拷贝
    >>> import copy
    >>> l1=["Google", "Facebook", "Baidu",["Apple","Banana","Peach"]]
    >>> l2 = copy.deepcopy(l1)
    >>> l2
    ['Google', 'Facebook', 'Baidu', ['Apple', 'Banana', 'Peach']]
    >>> l1[3].append("NewComer")
    >>> l1
    ['Google', 'Facebook', 'Baidu', ['Apple', 'Banana', 'Peach', 'NewComer']]
    >>> l2
    ['Google', 'Facebook', 'Baidu', ['Apple', 'Banana', 'Peach']]
  • 2.12.3 深浅拷贝原理解析

    • 浅拷贝
    • 深拷贝