Python学习之路2-列表介绍

《Python编程:从入门到实践》笔记。
本章主要介绍列表的基础与简单操作。

1. 列表(List)是什么

列表由一系列按特定顺序排列的元素组成。
类似于C/C++, Java中的数组,但和他们不同的是,Python列表中的元素可以是不同类型。
Python中用中括号[]来表示列表,并用逗号分隔其中的元素。

1
2
3
4
5
6
7
# 代码:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

# 结果:
# python打印了该列表的内部表示
['trek', 'cannondale', 'redline', 'specialized']

1.1 访问与使用列表中的元素

大多数编程语言中,索引都是从0开始的,而不是从1开始的。以下代码是输出上述列表中的第1个元素:

1
2
3
4
5
6
7
8
9
10
11
# 代码:
print(bicycles[0])
print(bicycles[0].title())

message = "My first bicycle was a " + bicycles[0].title() + "."
print(message)

# 结果:
trek
Trek
My first bicycle was a Trek.

Python还支持索引为负数,表示从后往前数,“-1”表示倒数第1个元素,例如:

1
2
3
4
5
# 代码:
print(bicycles[-1])

# 结果:
specialized

但是,不管索引是正数还是负数,都要注意索引越界问题

2. 修改、添加和删除元素

2.1修改列表元素

1
2
3
4
5
6
7
8
9
10
11
# 代码:
# 修改第一个元素
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles[0] = "ducati"
print(motorcycles)

# 结果:
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']

2.2 添加元素

在列表末尾添加元素

1
2
3
4
5
6
7
8
9
10
# 代码:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles.append("ducati")
print(motorcycles)

# 结果:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']

也可以动态建立motorcycles列表:

1
2
3
4
5
6
7
8
9
# 代码:
motorcycles = [] # 此句很重要!表示声明一个列表!
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)

# 结果:
['honda', 'yamaha', 'suzuki']

在列表中插入元素

1
2
3
4
5
6
7
8
9
10
11
# 代码:
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)

motorcycles.insert(4, 'dongfeng') # 在最后插入一个元素,相当于motorcycles.append('dongfeng')
print(motorcycles)

# 结果:
['ducati', 'honda', 'yamaha', 'suzuki']
['ducati', 'honda', 'yamaha', 'suzuki', 'dongfeng']

2.3删除元素

使用 del 语句删除元素:知道元素在列表中的位置

1
2
3
4
5
6
7
8
9
10
# 代码:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

del motorcycles[0]
print(motorcycles)

# 结果:
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']

del 可删除任意位置的列表元素,前提是知道其索引

使用 pop() 方法删除元素:会返回被删除的元素,当对被删除的元素还有后续操作时使用此方法。

默认删除列表最后一个元素,当传入参数(作为索引)时,删除指定位置的元素(但请注意越界问题):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 代码:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

last_owned = motorcycles.pop() # 默认
print("The last motorcycle I owned was a " + last_owned.title() + ".")
print(motorcycles)

motorcycles.pop(1) # 传入参数
print(motorcycles)

# 结果:
['honda', 'yamaha', 'suzuki']
The last motorcycle I owned was a Suzuki.
['honda', 'yamaha']
['honda']

所以,pop() 方法也可以删除任意位置的元素

根据值删除元素的remove()方法:当不知道元素索引,但知道元素值时

1
2
3
4
5
6
7
8
9
10
# 代码:
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)

motorcycles.remove('ducati')
print(motorcycles)

# 结果:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']

注意,如果列表中有多个相同的值,romve() 方法只删除第一个。

3. 组织列表

3.1 排序

sort() 方法对列表永久排序(原地操作)

1
2
3
4
5
6
7
# 代码:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)

# 结果:
['audi', 'bmw', 'subaru', 'toyota']

如果不想修改原列表,则应使用 sorted() 函数对列表进行临时排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 代码:
cars = ['bmw', 'audi', 'toyota', 'subaru']

print("Here is the original list:")
print(cars)

print("\nHere is ths 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 ths sorted list:
['audi', 'bmw', 'subaru', 'toyota']

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

不管是sort() 方法还是 sorted() 函数,如果想反向排序,只需要传入关键字参数reverse=True:

1
2
cars.sort(reverse=True)
sorted(cars, reverse=True)

以上两种排序是按ASCII码进行的排序,如果想自定义排序,需要传入自定义比较函数。

反向打印列表reverse() 方法,也是原地操作!并且这只是反向打印列表的实现方法之一

1
2
3
4
5
6
7
8
9
10
# 代码:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)

cars.reverse() # 注意!并没有排序后再反向!
print(cars)

# 结果:
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']

3.2 确定列表长度

使用 len() 函数获得列表长度:

1
2
3
4
5
6
# 代码:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(len(cars))

# 结果:
4

VPointer wechat
欢迎大家关注我的微信公众号"代码港"~~
您的慷慨将鼓励我继续创作~~