Python之列表的简介与操作

序列是 Python 中最基本的数据结构。序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。Python 有 6 个序列的内置类型,但最常见的是列表和元组。

列表可以进行的操作包括索引,切片,加,乘,检查成员等。此外,Python 已经内置确定序列的长度以及确定最大和最小元素的方法。列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型。

目录

1 创建列表

2 访问列表元素

3 修改列表元素

4 添加列表元素

5 删除列表元素

6 列表脚本操作符

7 列表组织

8 遍历整个列表

9 创建数值列表

10 列表切片

11 复制列表

12 元组

13 列表函数与方法


1 创建列表

列表通常包含多个元 素,因此给列表指定一个表示复数的名称(如letters 、digits 或names )是个不错的主意。创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']

# 示例
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

['trek', 'cannondale', 'redline', 'specialized']

2 访问列表元素

列表是有序集合,因此要访问列表的任意元素,只需将该元素的位置 (索引 )告诉Python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将后者放在方括号内。与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。通过索引列表可以进行截取、组合等操作。当你请求获取列表元素时,Python只 返回该元素,而不包括方括号。

list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[0] )
print( list[1] )
print( list[2] )

red
green
blue

索引也可以从尾部开始,最后一个元素的索引为 -1,往前一位为 -2,以此类推。这种语法很有用,因为你经常需要在不知道列表长度的情况下访问最后的元素。

list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[-1] )
print( list[-2] )
print( list[-3] )

black
white
yellow

使用下标索引来访问列表中的值,同样你也可以使用方括号 [ ] 的形式截取字符。

nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
print(nums[0:4])

[10, 20, 30, 40]

使用负数索引值截取:

list = ['Google', 'Runoob', "Zhihu", "Taobao", "Wiki"]
# 读取第二位
print ("list[1]: ", list[1])
# 从第二位开始(包含)截取到倒数第二位(不包含)
print ("list[1:-2]: ", list[1:-2])

list[1]:  Runoob
list[1:-2]:  ['Runoob', 'Zhihu']

3 修改列表元素

修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可 指定列表名和要修改的元素的索引,再指定该元素的新值。

list = ['Google', 'Runoob', 1997, 2000]
print ("第三个元素为 : ", list[2])
list[2] = 2001
print ("更新后的第三个元素为 : ", list[2])

第三个元素为 :  1997
更新后的第三个元素为 :  2001

4 添加列表元素

<1> 在列表末尾添加元素

在列表中添加新元素时,最简单的方式是将元素附加 (append)到 列表。给列表附加元素时,它将添加到列表末尾。

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']

<2> 在列表中插入元素

使用方法insert() 可在列表的任何位置添加新元素。为此,你需 要指定新元素的索引和值。

motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)

['ducati', 'honda', 'yamaha', 'suzuki']

5 删除列表元素

<1> 使用del 语句删除元素

如果知道要删除的元素在列表中的位置,可使用del 语句。

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)

['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']

<2> 使用方法pop() 删除元素

有时候,你要将元素从列表中删除,并接着使用它的值。方法pop() 删除列表末尾的元素,并让你能够接着使用它。术语弹出 (pop)源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki

<3> 弹出列表中任何位置处的元素

实际上,可以使用pop() 来删除列表中任意位置的元素,只需在圆 括号中指定要删除元素的索引即可。

motorcycles = ['honda', 'yamaha', 'suzuki']
first_owned = motorcycles.pop(0)
print(f"The first motorcycle I owned was a {first_owned.title()}.")

The first motorcycle I owned was a Honda.

如果你不确定该使用del 语句还是pop() 方法,下面是一个简单的 判断标准:如果你要从列表中删除一个元素,且不再以任何方式使 用它,就使用del 语句;如果你要在删除元素后还能继续使用它, 就使用方法pop() 。

<4> 根据值删除元素

有时候,你不知道要从列表中删除的值所处的位置。如果只知道要 删除的元素的值,可使用方法remove() 。注意 方法remove() 只删除第一个指定的值。如果要删除的 值可能在列表中出现多次,就需要使用循环来确保将每个值都 删除。

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)

['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']

6 列表脚本操作符

Python表达式结果描述
len([1, 2, 3])3长度
[1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]组合
['Hi!'] * 4['Hi!', 'Hi!', 'Hi!', 'Hi!']重复
3 in [1, 2, 3]True元素是否在列表中
for x in [1, 2, 3]: print(x, end=" ")1 2 3迭代

7 列表组织

在你创建的列表中,元素的排列顺序常常是无法预测的,因为你并非总能控制用户提供数据的顺序。这虽然在大多数情况下是不可避 免的,但你经常需要以特定的顺序呈现信息。有时候,你希望保留列表元素最初的排列顺序,而有时候又需要调整排列顺序。Python 提供了很多组织列表的方式,可根据具体情况选用。

<1> 使用方法sort() 对列表永久排序

Python方法sort() 让你能够较为轻松地对列表进行排序。假设你 有一个汽车列表,并要让其中的汽车按字母顺序排列。为简化这项任务,假设该列表中的所有值都是小写的。方法sort() 永久性地修改列表元素的排列顺序。现在,汽车是按字母顺序排列的,再也无法恢复到原来的排列顺序

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)

['audi', 'bmw', 'subaru', 'toyota']

还可以按与字母顺序相反的顺序排列列表元素,只需向sort() 方 法传递参数reverse=True 即可,同样,对列表元素排列顺序的修改是永久性的。下面的示例将汽车列表按与字母顺序相反的顺序排列:

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)

['toyota', 'subaru', 'bmw', 'audi']

<2> 使用函数sorted() 对列表临时排序

要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可 使用函数sorted() 。函数sorted() 让你能够按特定顺序显示列 表元素,同时不影响它们在列表中的原始排列顺序。

cars = ['bmw', 'audi', 'toyota', 'subaru']
print("Here is the original list:")
print(cars)
print("\nHere is the sorted list:")
print(sorted(cars))
print("\nHere is the original list again:")
print(cars)


Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']

Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']

Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']

注意,调用函数sorted() 后,列表元素的排列顺序并没有变。如果要按与字母顺序相反的顺序显示列表,也可向函 数sorted() 传递参数reverse=True 。 注意 在并非所有的值都是小写时,按字母顺序排列列表要 复杂些。决定排列顺序时,有多种解读大写字母的方式,要指 定准确的排列顺序,可能比我们这里所做的要复杂。

<3> 倒着打印列表

要反转列表元素的排列顺序,可使用方法reverse() 。方法reverse() 永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,只需对列表再次调用reverse() 即可。

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)

['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']

8 遍历整个列表

你经常需要遍历列表的所有元素,对每个元素执行相同的操作。需要对列表中的每个元 素都执行相同的操作时,可使用Python中的for 循环。编写for 循环时,可以给依次与列表中每个值相关联的临时 变量指定任意名称。然而,选择描述单个列表元素的有意义名称大有裨益。

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician)

alice
david
carolina

9 创建数值列表

列表非常适合用于存储数字集合,而Python提供了很多工具,可帮 助你高效地处理数字列表。

<1> 使用函数range()

Python函数range() 让你能够轻松地生成一系列数。在这个示例中,range() 只打印数1~4。这是编程语言中常见的差 一行为的结果。函数range() 让Python从指定的第一个值开始数, 并在到达你指定的第二个值时停止。因为它在第二个值处停止,所 以输出不包含该值(这里为5)。调用函数range() 时,也可只指定一个参数,这样它将从0开始。 例如,range(6) 返回数0~5。

for value in range(1, 5):
    print(value)

1
2
3
4

<2> 使用range() 创建数字列表

要创建数字列表,可使用函数list() 将range() 的结果直接转换 为列表。如果将range() 作为list() 的参数,输出将是一个数字列表。

numbers = list(range(1, 6))
print(numbers)

[1, 2, 3, 4, 5]

使用函数range() 时,还可指定步长。为此,可给这个函数指定第 三个参数,Python将根据这个步长来生成数。

even_numbers = list(range(2, 11, 2))
print(even_numbers)

[2, 4, 6, 8, 10]

使用函数range() 几乎能够创建任何需要的数集。例如,创建 一个列表,其中包含前10个整数(1~10)的平方

squares = []
for value in range(1,11):
    squares.append(value**2)
print(squares)

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

<3> 列表解析

列表解析将for 循 环和创建新元素的代码合并成一行

squares = [value**2 for value in range(1, 11)]
print(squares)

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

10 列表切片

要创建切片,可指定要使用的第一个元素和最后一个元素的索引。 与函数range() 一样,Python在到达第二个索引之前的元素后停 止。要输出列表中的前三个元素,需要指定索引0和3,这将返回索 引为0、1和2的元素。注意:可在表示切片的方括号内指定第三个值。这个值告诉 Python在指定范围内每隔多少元素提取一个。

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[1:4])

['martina', 'michael', 'florence']

# 如果没有指定第一个索引,Python将自动从列表开头开始:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])

['charles', 'martina', 'michael', 'florence']

# 让切片终止于列表末尾,也可使用类似的语法:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])

['michael', 'florence', 'eli']

# 利用负数索引输出列表末尾的任意切片:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])

['michael', 'florence', 'eli']

如果要遍历列表的部分元素,可在for 循环中使用切片。下面的示 例遍历前三名队员,并打印他们的名字:

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
    print(player.title())

Here are the first three players on my team:
Charles
Martina
Michael

11 复制列表

我们经常需要根据既有列表创建全新的列表。要复制列表,可创建一个包含整个列表的切片,方法是同时省略起 始索引和终止索引([ : ] )。这让Python创建一个始于第一个元素、终止于最后一个元素的切片,即整个列表的副本。

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)


My favorite foods are:
['pizza', 'falafel', 'carrot cake']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake']

如果只是 将my_foods 赋给friend_foods ,就不能得到两个列表。例如, 下面演示了在不使用切片的情况下复制列表的情况:

my_foods = ['pizza', 'falafel', 'carrot cake']
# 这行不通:
friend_foods = my_foods
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)


My favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

这里将my_foods 赋给friend_foods ,而不是将my_foods 的副本 赋给friend_foods 。这种语法实际上是让Python将新变 量friend_foods 关联到已与my_foods 相关联的列表,因此这两 个变量指向同一个列表。有鉴于此,当我们将'cannoli' 添加 到my_foods 中时,它也将出现在friend_foods 中。同样,虽 然'ice cream' 好像只被加入到了friend_foods 中,但它也将出 现在这两个列表中。

12 元组

列表非常适合用于存储在程序运行期间可能变化的数据集。然而,有时候你需要创建一系列不可修改的元素,元组可以满 足这种需求。Python将不能修改的值称为不可变的 ,而不可变的列 表被称为元组 。相比于列表,元组是更简单的数据结构。如果需要存储的一组值在程序的整个生命周期内都不变,就可以使用元组。

12.1 定义元组

元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组 后,就可使用索引来访问其元素,就像访问列表元素一样。

dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])

200
50

tup = "a", "b", "c", "d"   #  不需要括号也可以
type(tup)

<class 'tuple'>

下面来尝试修改元组dimensions 的一个元素,看看结果如何:

dimensions = (200, 50)
dimensions[0] = 250

Traceback (most recent call last):
  File "dimensions.py", line 2, in <module>
    dimensions[0] = 250
TypeError: 'tuple' object does not support item assignment

代码试图修改第一个元素的值,导致Python返回类型错误消 息。由于试图修改元组的操作是被禁止的,因此Python指出不能给 元组的元素赋值。

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:

tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 创建一个新的元组
tup3 = tup1 + tup2
print (tup3)

(12, 34.56, 'abc', 'xyz')

注意 严格地说,元组是由逗号标识的,圆括号只是让元组 看起来更整洁、更清晰。如果你要定义只包含一个元素的元 组,必须在这个元素后面加上逗号,否则括号会被当作运算符使用:

>>> tup1 = (50)
>>> type(tup1)     # 不加逗号,类型为整型
<class 'int'>

>>> tup1 = (50,)
>>> type(tup1)     # 加上逗号,类型为元组
<class 'tuple'>

创建只包含一个元素的元组通常没有意义,但自动生成的元组 有可能只有一个元素。

12.2 遍历元组中的所有值

像列表一样,也可以使用for 循环来遍历元组中的所有值:

dimensions = (200, 50)
for dimension in dimensions:
    print(dimension)

200
50

12.3 修改元组变量

虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此, 如果要修改前述矩形的尺寸,可重新定义整个元组:

dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
    print(dimension)

dimensions = (400, 100)
print("\nModified dimensions:")
for dimension in dimensions:
    print(dimension)


Original dimensions:
200
50

Modified dimensions:
400
100

12.4 将可迭代列表转换为元组

>>> list1= ['Google', 'Taobao', 'Runoob', 'Baidu']
>>> tuple1=tuple(list1)
>>> tuple1
('Google', 'Taobao', 'Runoob', 'Baidu')

13 列表函数与方法

Python包含以下函数:
1	len(list)
列表元素个数
2	max(list)
返回列表元素最大值
3	min(list)
返回列表元素最小值
4	list(seq)
将元组转换为列表
5   sum(list)
返回列表元素总和

Python包含以下方法:
1	list.append(obj)
在列表末尾添加新的对象
2	list.count(obj)
统计某个元素在列表中出现的次数
3	list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4	list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
5	list.insert(index, obj)
将对象插入列表
6	list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7	list.remove(obj)
移除列表中某个值的第一个匹配项
8	list.reverse()
反向列表中元素
9	list.sort( key=None, reverse=False)
对原列表进行排序
10	list.clear()
清空列表
11	list.copy()
复制列表
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值