集合体,即其中可能包括多个类型的多个值,但只由一个变量表示。
当多个值一某一个特定顺序储存时,我们就有了值的序列。序列是迭代的基础。
1.4 列表
列表(list)就是一种有序并且可变的集合体,用[]
构建。有序指的是列表可以做切分,可变是指可以增加删减或改变列表中元素的值(列表本身地址不改变)。
例子
primes = [2, 3, 5, 7]
print(primes)
[2, 3, 5, 7]
things = [5, 7, 'hello', 9.2, ['another', 'list']]
print(things)
[5, 7, 'hello', 9.2, ['another', 'list']]
列表上的迭代
对于一个列表,我们可以对列表中的每一个元素依次进行相关操作。这种方式就是迭代。例如:
students = ['Allen', 'Boris', 'Chris']
for student in students:
print("Hello, " + student + "!")
Hello, Allen!
Hello, Boris!
Hello, Chris!
因为列表一般都包括多个值,因此对于列表的命名方式我们通常采用复数的形式。
提取列表中元素
- 列表中的元素都可以通过该元素的位置索引来提取该值。
- 在Python中,位置顺序和C一样,从0开始。
- 如何操作:在要提取元素的列表名称后跟方括号
[]
以及位置索引。
例子:提取students
列表中的首个名字
student = students[0]
print(student)
Allen
通常我们有些时候想要获取列表中的最后一个元素,这个时候我们可以用-1
索引。更一般的情况,我们索引可以用-
+n
来获取倒数第n个元素。
student1 = students[-1]
student2 = students[-2]
print(student1, student2)
Chris Boris
- 正索引不能超过列表本身的长度-1。
- 负索引不能超过列表本身的长度0。
列举列表中的元素
- 当我们对列表做循环时,有时候我们想要知道当前元素的索引值。
- 此时我们使用
enumerate
可以在循环时跟踪元素的索引。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
print("All students are shown as follows:\n")
for index, student in enumerate(students):
num = str(index)
print("ID: " + num + " Student: " + student)
All students are shown as follows:
ID: 0 Student: Allen
ID: 1 Student: Boris
ID: 2 Student: Chris
ID: 3 Student: Davis
ID: 4 Student: Eric
创建一个空列表
names = []
列表长度
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
l = len(students)
print(l)
5
列表运算
修改列表中的元素值
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
students[0] = 'Austin'
print(students)
['Austin', 'Boris', 'Chris', 'Davis', 'Eric']
找到元素在列表中的位置(索引)
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
pos = students.index('Boris')
print(pos)
1
如果列表中存在多个目标值,只会返回第一次出现该值的位置:
outputs = ['rock', 'scissor', 'paper', 'rock', 'paper', 'scissor']
pos = outputs.index('paper')
print(pos)
2
判断元素是否存在于列表中
判断元素是不是在列表中我们只需要用in
关键词。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
output1 = 'Chris' in students
output2 = 'William' in students
print(output1, output2)
True False
在列表中增加值
在列表末尾增加值(append)
students.append('Frank')
print(students)
['Allen', 'Boris', 'Chris', 'Davis', 'Eric', 'Frank']
在列表中间添加值
在这种情况下我们要用到list.insert()
方法。基本语法是
list.insert(index, object)
表示在列表中第index位元素前面插入object。其实也就是让新插入的object变为第index位。
students.insert(3, 'Green')
print(students)
['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']
在列表中删除值
关于删除我们这里有几种方法:
-
del
关键词:在del
后面加上列表名称以及用方括号括上的索引。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
del students[0]
print(students)
['Boris', 'Chris', 'Davis', 'Eric']
-
remove()
:list的面向对象方法,括号中输入要删去的值。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
students.remove('Allen')
print(students)
['Boris', 'Chris', 'Davis', 'Eric']
-
pop()
:list的面向对象方法,括号中输入要删去值的索引,删除该值并返回。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
first_student = students.pop(0)
print(first_student, students)
Allen ['Boris', 'Chris', 'Davis', 'Eric']
给列表排序
列表排序有两种方法,sorted
和sort
。
-
sorted()
是Python中的内建函数,可以对有序集合体排序。 -
sort()
是list面向对象的方法。
因此这两者的区别为:
-
sorted()
生成一个新的列表。 -
sort()
对已经存在的列表进行修改。
逆序可以设定参数reverse=True
。
students = ['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']
students_ordered = sorted(students)
print(students)
print('Our students are currently in alphabetical order.')
print(students_ordered)
['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']
Our students are currently in alphabetical order.
['Allen', 'Boris', 'Chris', 'Davis', 'Eric', 'Frank', 'Green']
students = ['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']
students.sort(reverse=True)
print('Our students are currently in reverse alphabetical order.')
print(students)
Our students are currently in reverse alphabetical order.
['Green', 'Frank', 'Eric', 'Davis', 'Chris', 'Boris', 'Allen']
另外要注意,list面向对象的reverse()
方法和sort(reverse=True)
不一样,前者是将列表逆序,并没有排列:
students = ['Allen', 'Boris', 'Chris', 'Green', 'Davis', 'Eric', 'Frank']
students.reverse()
print(students)
['Frank', 'Eric', 'Davis', 'Green', 'Chris', 'Boris', 'Allen']
列表切片
切片我们用这种形式[a:b]
,其中a和b取值范围是是不超过列表长度的自然数。
-
[:b]
表示列表从头取到索引第b-1位的数 -
[a:]
表示列表从索引第a位的数取到末尾 -
[a:b]
:当时表示列表从索引第a位的数取到索引第b-1位,否则返回[]
。
students = ['Allen', 'Boris', 'Chris', 'Davis', 'Eric']
first_batch = students[:3]
middle_batch = students[1:4]
end_batch = students[3:]
print(first_batch)
print(middle_batch)
print(end_batch)
['Allen', 'Boris', 'Chris']
['Boris', 'Chris', 'Davis']
['Davis', 'Eric']
复制列表
列表复制是我们不能用list1 = list2
这种命令,这样一来会使得list1
和list2
都储存在同一地址里,导致如果其中一个变量发生变更,另一个也会发生变更。
a = [1,2,3]
b = a
b.append(4)
print(a,b)
[1, 2, 3, 4] [1, 2, 3, 4]
因此我要利用列表切片进行列表复制:
a = [1,2,3]
b = a[:]
b.append(4)
print(a,b)
[1, 2, 3] [1, 2, 3, 4]