【Python基础】1.4 列表

集合体,即其中可能包括多个类型的多个值,但只由一个变量表示。

当多个值一某一个特定顺序储存时,我们就有了值的序列。序列是迭代的基础。

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']

给列表排序

列表排序有两种方法,sortedsort

  • 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时表示列表从索引第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这种命令,这样一来会使得list1list2都储存在同一地址里,导致如果其中一个变量发生变更,另一个也会发生变更。

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]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容