前言

本文承接上文

列表(list)

之前我们提到过字符串,布尔值,数字,在这几种数据类型中也只有字符串可以用来存储数据,

那么如果有大量数据的存储需求,我们用字符串来存储够用吗

答案肯定是不够的

先说字符串

  1. 字符串只能存储少量的数据,对于大量的数据用字符串操作不方便也不易存储。

  2. 字符串存储的数据类型太单一,只能是字符串类型。

这个时候如果有其他语言基础的读者肯定能想到使用数组来作为数据的存储类型

但在python中,并不像java一样存在数组类型,而代替数组的在python中就是列表了

列表的特点:

1.可存放多个值

2.按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序

3.可修改指定索引位置对应的值,可变

列表的创建

列表的创建,是通过[]来创建列表(也可以通过强制类型转换list()来创建)

my_list = [] # 创建了一个空列表

而在列表中存储的数据,被称为元素

my_list = [10] # 创建一个只包含一个元素的列表

在当向列表中添加多个元素时,多个元素之间使用,隔开

my_list = [10,20,30,40,50] # 创建了一个包含有5个元素的列表

同时列表中可以保存任意的对象

my_list = [10,'hello',True,None,[1,2,3],print]

访问列表元素

列表是 Python 序列的一种,我们可以使用索引(Index)访问列表中的某个元素(得到的是一个元素的值),也可以使用切片访问列表中的一组元素(得到的是一个新的子列表)。
使用索引访问列表元素的格式为:其中,listname 表示列表名字,i 表示索引值。列表的索引可以是正数,也可以是负数。

listname[start : end : step]

其中,listname 表示列表名字,start 表示起始索引,end 表示结束索引,step 表示步长。以上两种方式我们已在《python基础(四)》中提到过,这里就不再赘述了,仅作示例演示,请看下面代码

my_list = [10,'hello',True,None,[1,2,3],print]
print(my_list[0])
print(my_list[1:5])
print(my_list[1::2])

运行结果为

10
['hello', True, None, [1, 2, 3]]
['hello', None, <built-in function print>]

增加操作

追加:

append() 方法用于在列表的末尾追加元素,该方法的语法格式如下:

listname.append(obj)

其中,listname 表示要添加元素的列表;obj 表示到添加到列表末尾的数据,它可以是单个元素,也可以是列表、元组等。

例如:

name=["张三","李四"]
name.append("王五")
print(name)

运行结果为

['张三', '李四', '王五']

这时王五这个元素就被添加到name这个列表的末尾

合并

extend()append() 的不同之处在于:extend() 不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中。
extend() 方法的语法格式如下:

listname.extend(obj)

其中,listname 指的是要添加元素的列表;obj 表示到添加到列表末尾的数据,它可以是单个元素,也可以是列表、元组等。

例如:

name=["张三","李四"]
num=[1,2,3]
name.extend(num)
print(name)

运行结果为

['张三', '李四', 1, 2, 3]

插入

inster的语法如下

list.insert(index, obj)

其中,index 表示指定位置的索引值。insert() 会将 obj 插入到 listname 列表第 index 个元素的位置。

例如:

name=["张三","李四"]name.insert(1,"王五")print(name)

运行结果为

['张三', '王五', '李四']

删除操作

删除列表

对于已经创建的列表,如果不再使用,可以使用del关键字将其删除。
实际开发中并不经常使用 del 来删除列表,因为 Python 自带的垃圾回收机制会自动销毁无用的列表,即使开发者不手动删除,Python 也会自动将其回收。

del 关键字的语法格式为:

del listname

其中,listname 表示要删除列表的名称。

例如:

name=["张三","李四"]
print(name)
del name
print(name)

运行结果为

['张三', '李四']
Traceback (most recent call last):
File "E:/code/python/test.py", line 4, in <module>
print(name)
NameError: name 'name' is not defined

这时在去打印name列表就会报错了

删除元素

del:根据索引值删除元素

语法格式为:

del listname[index]

其中,listname 表示列表名称,index 表示元素的索引值。

例如:

name=["张三","李四"]
print(name)
del name[0]
print(name)

运行结果为

['张三', '李四']
['李四']

同时del也可以删除连续的元素

语法格式为:

del listname[start : end]

其中,start 表示起始索引,end 表示结束索引。del 会删除从索引 start 到 end 之间的元素,不包括 end 位置的元素。

例如:

name=["张三","李四"]
print(name)
del name[0:1]
print(name)

运行结果为

['张三', '李四']
['李四']

pop():根据索引值删除元素

pop()方法用来删除列表中指定索引处的元素,具体格式如下:

listname.pop(index)

其中,listname 表示列表名称,index 表示索引值。如果不写 index 参数,默认会删除列表中的最后一个元素,类似于“出栈”操作。

例如:

name=["张三","李四"]
print(name)
name.pop(1)
print(name)

运行结果为

['张三', '李四']
['张三']

remove():根据元素值进行删除

remove() 该方法会根据元素本身的值来进行删除操作。

需要注意的是,remove() 方法只会删除第一个和指定值相同的元素,而且必须保证该元素是存在的,否则会引发 ValueError 错误。

例如:

nums = [40, 36, 89, 2, 36, 100, 7]
print(nums)
nums.remove(36)#
print(nums)
nums.remove(36)
print(nums)

运行结果为

[40, 36, 89, 2, 36, 100, 7]
[40, 89, 2, 36, 100, 7]
[40, 89, 2, 100, 7]

clear():删除列表所有元素

clear() 用来删除列表的所有元素,也即清空列表,例如:

nums = [40, 36, 89, 2, 36, 100, 7]
print(nums)
nums.clear()#清空列表
print(nums)

结果为

[40, 36, 89, 2, 36, 100, 7]
[]

修改列表

修改单个元素

修改单个元素非常简单,直接对元素赋值即可,例如:

nums = [40, 36, 89, 2, 36, 100, 7]
nums[2] = -26 #使用正数索引
nums[-3] = -66.2 #使用负数索引
print(nums)

运行结果为

[40, 36, -26, 2, -66.2, 100, 7]

修改一组元素

Python 支持通过切片语法给一组元素赋值。在进行这种操作时,如果不指定步长(step 参数),Python 就不要求新赋值的元素个数与原来的元素个数相同;这意味,该操作既可以为列表添加元素,也可以为列表删除元素。

例如:

nums = [40, 36, 89, 2, 36, 100, 7]
#修改第 1~4 个元素的值(不包括第4个元素)
nums[1: 4] = [45.25, -77, -52.5]
print(nums)

运行结果为

[40, 45.25, -77, -52.5, 36, 100, 7]

如果对空切片(slice)赋值,就相当于插入一组新的元素,例如:

nums = [40, 36, 89, 2, 36, 100, 7]
#在4个位置插入元素
nums[4: 4] = [-77, -52.5, 999]
print(nums)

运行结果为

[40, 36, 89, 2, -77, -52.5, 999, 36, 100, 7]

注意使用切片语法赋值时,Python 不支持单个值,例如下面的写法就是错误的:

nums = [40, 36, 89, 2, 36, 100, 7]
#在4个位置插入元素
nums[4: 4] = -77
print(nums)

运行结果为

Traceback (most recent call last):
File "E:/code/python/test.py", line 3, in <module>
nums[4: 4] = -77
TypeError: can only assign an iterable

但是如果使用字符串赋值,Python 会自动把字符串转换成序列,其中的每个字符都是一个元素,请看下面的代码:

nums = [40, 36, 89, 2, 36, 100, 7]
#在4个位置插入元素
nums[4: 4] ="xyz"
print(nums)

运行结果为

[40, 36, 89, 2, 'x', 'y', 'z', 36, 100, 7]

同时使用切片语法时也可以指定步长(step 参数),但这个时候就要求所赋值的新元素的个数与原有元素的个数相同,例如:

nums = [40, 36, 89, 2, 36, 100, 7]
#步长为2,为第1、3、5个元素赋值
nums[1: 6: 2] = [0.025, -99, 20.5]
print(nums)

运行结果为

[40, 0.025, 89, -99, 36, 20.5, 7]

查找元素

count()方法

count() 方法用来统计某个元素在列表中出现的次数,基本语法格式为:

listname.count(obj)

其中,listname 代表列表名,obj 表示要统计的元素。

如果 count() 返回 0,就表示列表中不存在该元素,所以 count() 也可以用来判断列表中的某个元素是否存在。

例如:

nums = [40, 36, 89, 2, 36, 100, 7, -20.5, 36]
#统计元素出现的次数
print("36出现了%d次" % nums.count(36))
#判断一个元素是否存在
if nums.count(100):
print("列表中存在100这个元素")
else:
print("列表中不存在100这个元素")

运行结果为

36出现了3次
列表中存在100这个元素

index() 方法

index() 方法用来查找某个元素在列表中出现的位置(也就是索引),如果该元素不存在,则会导致 ValueError 错误,所以在查找之前最好使用 count() 方法判断一下。

index() 的语法格式为:

listname.index(obj, start, end)

其中,listname 表示列表名称,obj 表示要查找的元素,start 表示起始位置,end 表示结束位置。
start 和 end 参数用来指定检索范围:

  1. start 和 end 可以都不写,此时会检索整个列表;
  2. 如果只写 start 不写 end,那么表示检索从 start 到末尾的元素;
  3. 如果 start 和 end 都写,那么表示检索 start 和 end 之间的元素。

同时index() 方法会返回元素所在列表中的索引值。

例如:

nums = [40, 36, 89, 2, 36, 100, 7, -20.5, -999]
# 检索列表中的所有元素是否有2这个元素
print(nums.index(2))
# 检索3~7之间的元素是否有100这个元素
print(nums.index(100, 3, 7))
# 检索4之后的元素是否有7这个元素
print(nums.index(7, 4))
# 检索一个不存在的元素
print(nums.index(55))

运行结果为

3
5
6
Traceback (most recent call last):
File "E:/code/python/test.py", line 9, in <module>
print( nums.index(55) )
ValueError: 55 is not in list

本文到此结束,下文静等更新…(未完待续)

(下文更新for循环和元组)

感谢你的阅读