1.列表的定义及增删改查
一、列表
列表
由一系列按特定顺序排列的元素组成。我们可以创建包含字母表中所有字母、数字0~9,也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。鉴于列表通常包含多个元素,所以给列表指定一个表示复数的名称(如:names)是一个不错的主意。
在
python
中,用方括号[]
来表示列表,并用逗号来分隔其中的元素。若是直接打印列表,Python会打印列表的内部表示,包括方括号。
二、定义列表
我们创建的大多数列表都将是动态的,这意味着在列表创建之后,将随着程序的运行增删元素。
例如:你创建一个游戏,要求玩家射杀小怪兽;为此,可在开始时将一些小怪兽存储在列表中,然后每当有小怪兽被消灭时,都将其从列表中删除,而每次有新的小怪兽出现在屏幕上时,都将其添加到列表中。在整个游戏运行期间,小怪兽列表的长度将不断变化。
1.[]中括号
用中括号括起一堆数据即可,数据之间用逗号隔开。
lis = [1,2,3,4,5]
(1)创建空列表
不知道要向列表中添加什么数据,也可创建一个空列表。
empty = []
(2)列表中嵌套列表
lis1 = [1,'思齐',155.520,[1,2,2] ]
可以看到上面这个列表包含有: 整型、字符串、浮点型数据、子列表。
2.list()方法
list()方法
用于把一个可迭代对象转换为列表。
list(iterable)
'''
功能: 把一个可迭代对象转换为列表.
参数:
① iterable: 可迭代对象。
返回值: 列表。
'''
(1)创建空列表
empty = list()
empty
(2)将字符串中的每个字符迭代存放进列表
a = list('Hero')
a
(3)将元组中的每个元素迭代存放进列表
b = list( (1,2,3,4,5) )
b
(4)与range()结合生成数字列表
numbers = list(range(1,6))
numbers
三、列表的访问
可以通过元素的索引值(index)从列表中获取单个元素。
1.访问列表元素
列表是有序集合,因此想要访问列表的任意元素,只需将该元素的位置或索引告诉
Python
即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。
(1)示例
① 例1
fruits = ['葡萄','草莓','大鸭梨','菠萝']
print(fruits[2])
'大鸭梨'
当我们请求获取列表元素时,
Python
只返回该元素,而不包括方括号和引号。此外,还可以对任何列表元素调用一些方法,如
title()、uper()等
。
2.索引
列表索引值从 0 开始。
在
Python
中,凡是顺序索引第一个列表元素的索引为0,而不是1。在大多数编程语言中都是如此,这与列表操作的底层实现相关。因为计算机本身是二进制的,在二进制世界里只有两个数:0 、1,0也就是二进制中第一个数,秉承这个传统,0也就用于表示第一个数。如果结果出乎意料,请看看你是否犯了简单的
差一错误
。第二个列表元素的索引为1。依此类推,要访问列表的任何元素,都可将其位置减1,并将结果作为
索引(index)
。
(1)索引为负值
Python
为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1
,可让Python
返回最后一个列表元素。这种语法很有用,因为我们经常需要在不知道列表长度的情况访问最后的元素。
这种约定也适用于其他负数索引,例如:索引-2返回倒数第二个列表元素,素引-3返回倒数第三个列表元素,以此类推。
① 示例
fruits = ['葡萄','草莓','大鸭梨','菠萝']
fruits[-1]
'菠萝'
3.使用列表中的各个值
可像使用其他变量一样使用列表中的各个值。例如,你可以使用拼接根据列表中的值来创建消息。
animals = ["rabbit","dog","panda","cat"]
# 使用animals[2]的值生成一个句子,并将其存储在变量message中
message = "My favorite animal is the " + animals[2] + "."
print(message)
My favorite animal is the panda.
四、修改列表元素
1.修改
修改列表元素的语法和访问列表元素的语法相似。
通过指定列表名和要修改元素的索引值(index)从列表中获取单个元素,再映射1个新值。
fruit = ['葡萄','草莓','大鸭梨','菠萝']
fruit[2] = '大西瓜'
fruit
# ['葡萄', '草莓', '大西瓜', '菠萝']
五、添加
1.append(): 末尾单一元素添加
列表名.append( 想要添加的元素 )
'''
功能: 向列表中添加元素,**每次只能加一个元素,并且是往列表的末尾添加数据**
(也可理解为追加、排队增加)。
Append object to the end of the list.
参数: 想要添加的元素。
返回值: 添加完成后的列表。
'''
① 追加1个元素
num = [1,2,3,4,5]
num.append(6)
num
# 会发现参数 6 被添加到列表的末尾。
② 追加多个元素(可迭代对象)
若是我们直接添加多个元素,
Python
会向我们报错TypeError: append() takes exactly one argument (2 given),
也就是说append()
方法1次只能添加一个参数,那么如果我们就想添加多个元素该如何操作?用可迭代对象进行添加多个元素。
Ⅰ.元组
nums = [1,2,3,4,5,6]
nums.append( (7,8) )
print(nums)
'''
[1, 2, 3, 4, 5, 6, (7, 8)]
'''
Ⅱ.列表
nums = [1,2,3,4,5]
nums.append(["思齊","永远18岁"])
print(nums)
'''
[1, 2, 3, 4, 5, ['思齊', '永远18岁']]
'''
Ⅲ.字典
nums = [1,2,3,4,5]
nums.append({"姓名":"思齊","年龄":"永远18岁"})
print(nums)
'''
[1, 2, 3, 4, 5, {'姓名': '思齊', '年龄': '永远18岁'}]
'''
③ 优点
方法
append()
让动态地创建列表易如反掌,例如,你可以先创建一个空列表,再使用一系列的append()
添加元素,因为我们经常要等程序运行后,才知道用户要在程序中存储哪些数据。为控制用户,可首先创建一个空列表,用于存储用户将要输入的值,然后将用户提供的每一个新值附加到列表中。
2.extend(): 末尾多元素添加
列表名.extend( [元素1,元素2,...] )
'''
功能: 可向列表中添加多个元素,但是在**列表末尾添加**。
参数:
① 可迭代对象: 将想要添加的元素以 列表 或 元组 形式传入。
返回值: 添加完成后的列表。
'''
① 参数为可迭代对象
一定要注意,
extend()
的参数是可迭代对象。和
append()
方法一样,如果我们直接在方法的括号里添加多个元素,Python
还是会向我们报错TypeError: extend() takes exactly one argument (2 given).extend(iterable, /) method of builtins.list instance Extend list by appending elements from the iterable.
,不是说append()
可以添加多个元素吗?这是为什么呢?原因就在于extend() 接收可迭代对象。
Ⅰ.传入元组
nums = [1,2,3,4,5]
nums.extend( (9,10) )
print(nums)
'''
[1, 2, 3, 4, 5, 9, 10]
向extend()传入一个元组,添加成功。
'''
Ⅱ.传入列表
nums = [1,2,3,4,5]
nums.extend( [7,8] )
print(nums)
'''
[1, 2, 3, 4, 5, 7, 8]
向extend()传入一个列表,添加成功。
'''
Ⅲ.传入字典(不可取)
nums = [1,2,3,4,5]
nums.extend( {"姓名":"思齊","年龄":"永远18岁"} )
print(nums)
'''
[1, 2, 3, 4, 5, '姓名', '年龄']
'''
如果用 + 只是临时添加。
向列表传入一个字典是不可取的,因为会造成数据丢失,从上述结果可看到,只是把键名取出,而键值被省略。
3.insert():任意位置添加
insert(索引,值)
'''
功能: 可向列表任意位置添加元素。
参数:
① 索引:列表中的位置。
② 值:在这个位置添加什么元素。
返回值: 添加完成后的列表。
'''
insert(index, object, /) method of builtins.list instance.Insert object before index.
① 向列表任意位置添加单个元素
num = [1,2,3,4,5]
num.insert(0,0)
num
② 向列表任意位置添加多个元素
num = [1,2,3,4,5]
num.insert(5,[6,7])
num
# outout: [1, 2, 3, 4, 5, [6, 7]]
num.insert(6,[8,9,10])
num
# outout: [1, 2, 3, 4, 5, [6, 7], [8, 9, 10]]
Ⅰ.多个元素被看作一个整体
其实,
insert()方法
添加多个元素,并不是实际意义上的添加多个元素,而是添加的多个元素被看成一个整体。
六、删除
我们经常需要从列表中删除一个或多个元素。例如:玩家将游戏中的一个小怪兽消灭后,你很可能要将其从存活的小怪兽列表中删除;当用户在你创建的web应用中注销其账户时,你需要将该用户从活跃用户列表中删除。你可以根据位置或值来删除列表中的元素。
1.使用del语句删除元素
如果知道要删除的元素在列表中的位置,可使用
del语句
。del 是一个语句,不是一个列表的方法,所以不需要在 del 后面加上小括号()。
del 加列表名,可以删除整个列表。
del 加位置索引,可以删除该位置上的元素。
(1)怎么做?
① 删除整个列表
del fruits
② 删除指定位置上的元素
fruits = ['葡萄','草莓','大鸭梨','菠萝']
del fruits[1] # 删除草莓
③ 连续删除
fruits = ['葡萄','草莓','大鸭梨','菠萝']
del (fruits[1],fruits[2])
# 删除了草莓、菠萝,先删除的是fruits中索引为1的,接着再删除新列表中索引为2的。
(2)永久性删除
使用del语句将值从列表中删除后,你就无法再访问它了。
2.pop():先查出来在删掉,在数据库有用
有时候,你要将元素从列表中删除,并接着使用它的值。
例如:你可能需要获取刚被消灭的小怪兽的x和y坐标,以便在相应的位置显示爆炸效果;在Web应用程序中,你可能要将用户从活跃成员列表中删除,并将其加入到非活跃成员列表中。
方法pop()默认删除列表末尾的元素,并让你能够接着使用它。该术语弹出(pop)就源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。
列表名.pop() 或 列表名.pop( 索引值 )
'''
功能: 默认删除最后一个元素,或删除指定元素。
参数:
① 不写值,默认删除最后一个。
② 索引值: 加上一个索引值作为参数的时候,会弹出这个索引值对应的元素。
返回值: 删除完成后的列表。
'''
pop(index=-1, /) method of builtins.list instance
Remove and return item at index (default last).
Raises IndexError if list is empty or index is out of range.
① 默认删除最后一个
chinas = ['凤凰','麒麟','玄武','白虎','青龙']
a = china.pop()
print(a)
print(china)
'''
青龙
['凤凰', '麒麟', '玄武', '白虎']
'''
② 根据索引值删除
china.pop(3)
china
# ['凤凰', '麒麟', '玄武']
3.remove(): 删除指定元素
使用
remove()
删除元素,并不需要知道这个元素在列表中的具体位置,只需要知道该元素存在于列表中即可。若要删除的东西在列表中根本不存在,程序就会报错。
remove() 并不能指定删除某个位置的元素,这需要用 del 实现。
列表名.remove( 元素1 )
remove(元素值)
'''
功能: 删除指定元素。
参数:
① 列表中存在的元素。
返回值: 删除完成后的列表。
'''
① 只删除指定的第一个
只删除指定的第一个值,如果要删除的值在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。
fruits = ['葡萄','菠萝','草莓','大鸭梨','菠萝']
fruits.remove('菠萝')
fruits
# output: ['葡萄', '草莓', '大鸭梨','菠萝']
② 删除不存在的元素
python
fruits = ['葡萄','菠萝','草莓','大鸭梨','菠萝']
fruits.remove('芒果')
fruits
# ValueError: list.remove(x): x not in list
③ 删除时也可接着使用该值
在定义列表后,先将值存储在变量中,接着,用这个变量来告诉
Python
将哪个值从列表中删除,最后,在列表中该值被删除,但它还存储在变量中。
python
fruits = ['purple','菠萝','草莓','大鸭梨','菠萝']
print(fruits)
fruit = fruits[0]
fruits.remove(fruit)
print(fruits)
print("\nA " + fruit.title() + " is too expensive for me.")
'''
['purple', '菠萝', '草莓', '大鸭梨', '菠萝']
['菠萝', '草莓', '大鸭梨', '菠萝']
A Purple is too expensive for me.
'''
4.clear():清空列表中所有元素
列表名.clear()
python
'''
功能: 清空列表中所有元素。
参数: 无。
返回值: 空列表。
'''
① 怎么做?
python
fruit = ['葡萄','草莓','大鸭梨','菠萝']
fruit.clear()
5.方法的选择
当我们不确定该选择
del语句、pop()、remove()
中的哪一个的时候,我们可以按照以下一个简单判断标准:若是我们要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句
;若是我们在删除元素之后还想继续使用它,就是用pop()或remove()方法
。