python基础数据类型列表(list)详解

1. python列表定义

python的列表是一种有序且可变的序列,列表使用中括号[]进行定义,各项元素之间使用逗号分隔。python的列表与其他编程语言中的数组很像,但独特之处在于python并不要求列表中的元素必须都是同一个类型,而是可以存储任意类型的数据。

列表和字符串都是序列,同样支持索引方式访问,也支持切片操作,不同于字符串的是你可以修改列表的内容。

在定义列表时,不需要指定列表的长度,也不用担心持续向列表中写入新的数据会达到存储容量限制,python列表是动态扩容的。

1. 创建列表

创建python列表有两种方式:

  1. 使用[] 创建列表
  2. 使用内置函数创建列表

使用[]创建一个空列表

empty_list = []         # 创建一个空列表

空列表的长度是0,此后你可以使用append方法向列表添加元组。

使用[]创建一个有多个元素的列表

lst = [1, '2', True, [1, 2]]

列表对存储在其中的元素类型没有要求,因此,你可以将任意类的元素存储在列表中,甚至包括列表本身,后面将要学习的元组,字典,集合,同样可以存在列表中。

使用内置函数list创建列表

lst1 = list("python")
lst2 = list([1, 2, 3])
print(lst1)     # ['p', 'y', 't', 'h', 'o', 'n']
print(lst2)     # [1, 2, 3]

能够作为list参数的不只是字符串和列表,任何可迭代对象都可以作为list函数的参数,list会返回一个新的列表

2. 访问列表里的元素

访问列表里的元素只能使用索引方式,它的一般代码形式如下

list[index]

在列表对象后面紧跟一对中括号[],中括号里的index是索引值,索引从0开始,正向索引逐个递增,列表的最大索引值是列表的长度减去1。python列表的索引支持反向索引,最后一个元素的索引值是-1,反向递减。以下面的列表为例

lst = [2, 3, 5, 6]

下面这张图可以很好的阐述索引的概念
python列表索引

假设你现在想要使用print语句输出列表的最后一个元素的值,你有两种方法

print(lst[3])       # 6
print(lst[-1])      # 6

一般情况下使用正向索引就足够了,但某些情况下需要操作列表倒数某个元素时,使用反向索引更容易。

3. 向列表里新增数据

向一个列表新增数据,有三个常用的方法,他们有各自的应用场景,这三个方法分别是

  1. append
  2. insert
  3. extend

append方法在列表的末尾新增数据

lst = [1, 2, 3]
lst.append(4)
print(lst)          # [1, 2, 3, 4]

新增的数据一定会成为列表的最后一个元素,如果你想在列表中间的某个位置上插入一个新的元素,需要使用insert方法。

insert方法在指定的索引位置的前面向列表中插入一个新的元素,指定的插入索引位置是多少,新元素的索引就是多少。

lst = [1, 2, 3]
lst.insert(0, 4)
print(lst)      # [4, 1, 2, 3]

在这个例子中,我使用insert方法在索引0的前面插入新元素4,插入后,4的索引就是0。由于insert只能在指定索引的前面插入,因此你无法使用insert方法在列表的末尾插入新的元素,列表的最大索引是2,如果insert指定插入索引位置为2,那么新插入元素的索引就会是2,而原本在索引2的位置上的元素将被移动到索引3的位置上。

append和inset一次只能新增一个元素,extend方法可以一次性将另一个序列里的元素追加到列表的末尾

lst1 = [1, 2, 3]
lst2 = [4, 5, 6]

lst1.extend(lst2)
print(lst1)         # [1, 2, 3, 4, 5, 6]

4. 修改列表里的数据

修改列表里的某一项元素,需要通过索引方式找到元素然后重新对其赋值。

lst = [1, 2, 3]
lst[0] = 100
print(lst)      # [100, 2, 3]

列表的第一个元素原本是1,现在被修改为100。

5. 删除列表中的数据

删除列表中的数据,有4种方法,分别是

  1. remove
  2. pop
  3. del
  4. clear

使用remove方法删除列表里的元素需要在方法里指明要删除的元素的值。

lst = [1, 2, 3, 2]
lst.remove(2)       # 明确指明要删除2
print(lst)          # [1, 3, 2]

虽然指明要删除2,但是remove方法不会将列表里所有的值为2的元素删除,它只会删除能够找到的第一个符合删除条件的值,剩余的值即便符合删除条件也不会被删除。

同时需要注意的是,如果指定要删除的元素不存在,会引发ValueError异常,因此在使用remove方法之前,务必先使用成员运算符in 或者是其他方法先确定被删除的元素是否真的在列表中。

使用pop方法删除列表里的元素时需要在方法里指明要删除的元素的索引

lst = [1, 2, 3, 2]
lst.pop(2)       # 指明要删除索引为2的元素
print(lst)          # [1, 2, 2]

这段代码里,pop方法明确要求删除索引为2的值,列表里,lst[2] 的值是3,因此3被删除。

使用del关键字也可以删除指定索引位置的元素

lst = [1, 2, 3, 2]
del lst[2]
print(lst)    # [1, 2, 2]

clear方法清空列表,删除所有元素

lst = [1, 2, 3, 2]
lst.clear()
print(lst)      # []

clear方法情况列表后,lst变为一个空列表。

6. 遍历列表

遍历列表的常用方法是使用for循环,它的模式非常固定

lst = [1, 2, 3, 2]

for item in lst:
    print(item)

程序输出结果

1
2
3
2

7 列表的一些基础常规操作

使用内置函数len获取列表的长度

lst = [1, 2, 3, 2]

print(len(lst))     # 4

知晓列表的长度,就能够计算出列表的索引范围,列表的最小索引是0,最大索引是起长度值减1,这在通过索引方式遍历列表时是非常有用的

lst = [1, 2, 3, 2]

for i in range(len(lst)):
    print(lst[i])

这段代码如果现在不能理解,没有关系,等学习到for循环后再回看这段代码就一目了然了。

使用算数运算符+合并两个列表

python的序列,例如字符串,列表,元组,都支持算数运算符+

lst1 = [1, 2, 3]
lst2 = [4, 5, 6]

lst3 = lst1 + lst2
print(lst3)     # [1, 2, 3, 4, 5, 6]

列表lst1 与 lst2 相加得到一个新的列表lst3。

使用算数运算符*让列表里的元素个数翻倍

lst1 = [1, 2, 3]
lst2 = lst1*3
print(lst2)      # [1, 2, 3, 1, 2, 3, 1, 2, 3]

lst1*3,会生成一个新的列表,新列表的长度是lst1的3倍。

使用成员运算符in判断某个元素是否在列表中

lst1 = [1, 2, 3]
print(2 in lst1)            # True
print(3 not in lst1)        # False

in 可用于判断一个元素是否在列表中,如果前面加一个not,就表示判断一个元素是否不在列表中。

8. 列表的常用方法

方法 功能
count() 统计某个元素在列表中出现的次数
append() 在列表末尾添加新的对象
extend 在列表末尾一次性追加另一个序列中的多个值
index 返回一个元素在列表中第一次出现的位置索引
insert() 将对象插入列表中的指定位置
pop() 删除列表中指定索引的元素,默认删除最后一个并返回该值
remove() 移除列表中某个值的第一个匹配项
reverse() 翻转列表
sort() 对列表进行排序

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案