Python基础之列表

一、摘要

本片博文将介绍Python中的列表含义以及如何使用它

二、列表是什么

列表 由一系列按特定顺序排列的元素组成,可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系在Python中,用方括号([] )来表示列表,并用逗号来分隔其中的元素

三、列表实操

 创建列表:

>>>bicycles = ['trek', 'cannondale', 'redline', 'specialized']
>>>print(bicycles)
['trek', 'cannondale', 'redline', 'specialized']

访问列表元素:

列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内

>>>bicycles = ['trek', 'cannondale', 'redline', 'specialized']
>>>print(bicycles[0])
trek

如果你找的元素是个字符串,还可以使用title()函数

>>>bicycles = ['trek', 'cannondale', 'redline', 'specialized']
>>>print(bicycles[0].title())

在Python中,第一个列表元素的索引为0,而不是1。在大多数编程语言中都是如此,这与列表操作的底层实现相关。如果结果出乎意料,请看看你是否犯了简单的差一错误,第二个列表元素的索引为1。根据这种简单的计数方式,要访问列表的任何元素,都可将其位置减1,并将结果作为索引。例如,要访问第四个列表元素,可使用索引3

Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1 ,可让Python返回最后一个列表元素:

>>>bicycles = ['trek', 'cannondale', 'redline', 'specialized']
>>>print(bicycles[-1])
specialized

这种语法很有用,因为你经常需要在不知道列表长度的情况下访问最后的元素。这种约定也适用于其他负数索引,例如,索引-2 返回倒数第二个列表元素,索引-3 返回倒数第三个列表元素,以此类推,然而当列表为空时此种方法会报IndexError

使用列表中的各个值:

>>>bicycles = ['trek', 'cannondale', 'redline', 'specialized']
>>>message = "My first bicycle was a " + bicycles[0].title() + "."
>>>print(message)
My first bicycle was a Trek.

修改列表元素:

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

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

在列表中添加元素:

在列表中添加新元素时,最简单的方式是将元素附加到列表末,使用函数append()

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

在列表中插入元素:

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

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

从列表中删除元素:

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

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

使用del 可删除任何位置处的列表元素,条件是知道其索引,使用del 语句将值从列表中删除后,你就无法再访问它了

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

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

方法pop() 是怎么起作用的呢?假设列表中的摩托车是按购买时间存储的,就可使用方法pop() 打印一条消息,指出最后购买的是哪款摩托车:

>>>motorcycles = ['honda', 'yamaha', 'suzuki']
>>>last_owned = motorcycles.pop()
>>>print("The last motorcycle I owned was a " + last_owned.title() + ".")
The last motorcycle I owned was a Suzuki.

弹出列表中任何位置处的元素,可以使用pop() 来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引即可

>>>motorcycles = ['honda', 'yamaha', 'suzuki']
>>>first_owned = motorcycles.pop(0)
>>>print('The first motorcycle I owned was a ' + first_owned.title() + '.')
The first motorcycle I owned was a Honda.

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

根据值删除元素:有时候,你不知道要从列表中删除的值所处的位置。如果你只知道要删除的元素的值,可使用方法remove()

 

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

 

注意:方法remove() 只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值

列表排序:

使用方法sort() 对列表进行永久性排序

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

方法sort() 永久性地修改了列表元素的排列顺序

你还可以按与字母顺序相反的顺序排列列表元素,为此,只需向sort() 方法传递参数reverse=True,同样,对列表元素排列顺序的修改是永久性的

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

使用函数sorted() 对列表进行临时排序

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

我们甚至可以将sorted(cars)赋值给一个新的列表,如下代码我们能看到实际上sorted并没有真正的改变原列表的顺序

>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> newcars=sorted(cars)
>>> cars
['bmw', 'audi', 'toyota', 'subaru']
>>> newcars
['audi', 'bmw', 'subaru', 'toyota']

同样的sorted也接受reverse=True

>>> cars
['bmw', 'audi', 'toyota', 'subaru']
>>> newcars=sorted(cars, reverse=True)
>>> newcars
['toyota', 'subaru', 'bmw', 'audi']
>>>

注意:在并非所有的值都是小写时,按字母顺序排列列表要复杂些。决定排列顺序时,有多种解读大写字母的方式,要指定准确的排列顺序,可能比我们这里所做的要复杂。

倒着打印列表:要反转列表元素的排列顺序,可使用方法reverse(), reverse() 不是指按与字母顺序相反的顺序排列列表元素,而只是反转列表元素的排列顺序

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

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

 确定列表的长度:使用函数len() 可快速获悉列表的长度

>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4

注意:Python计算列表元素数时从1开始,因此确定列表长度时,你应该不会遇到差一错误

如果不用sort()函数进行排序,我们开可以使用循环,也就是实现所谓的冒泡:

>>> list1 = [1,3,5,7,9,12,3,45,6678,2345,45,567,23]
>>> for i in range(len(list1)-1):
...     for j in range(len(list1)-i-1):
...             if list1[j]>list1[j+1]:
...                     list1[j],list1[j+1] = list1[j+1],list1[j]# 换位
...
>>> print(list1)
[1, 3, 3, 5, 7, 9, 12, 23, 45, 45, 567, 2345, 6678]

 

遍历整个列表:for循环

>>> magicians = ['alice', 'david', 'carolina']
>>> for magician in magicians:
...     print(magician)
...
alice
david
carolina
>>> magicians = ['alice', 'david', 'carolina']
>>> for magician in magicians:
...     print(magician.title() + ", that was a great trick!")
...     print("I can't wait to see your next trick, " + magician.title() + ".\n")
...
Alice, that was a great trick!
I can't wait to see your next trick, Alice.

David, that was a great trick!
I can't wait to see your next trick, David.

Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

创建数值列表:range()

Python函数range() 让你能够轻松地生成一系列的数字

>>> for value in range(1,5):
...     print(value)
...
1
2
3
4

函数range() 让Python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5),要打印数字1~5,需要使用range(1,6)

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

>>>numbers = list(range(1,6))
>>>print(numbers)
[1, 2, 3, 4, 5]

使用函数range() 时,还可指定步长

>>>even_numbers = list(range(2,11,2))
>>>print(even_numbers)
[2, 4, 6, 8, 10]

函数range() 从2开始数,然后不断地加2,直到达到或超过终值(11)

>>> squares = []
>>> for value in range(1,11):
...     square = value**2
...     squares.append(square)
...     print(squares)
...
[1]
[1, 4]
[1, 4, 9]
[1, 4, 9, 16]
[1, 4, 9, 16, 25]
[1, 4, 9, 16, 25, 36]
[1, 4, 9, 16, 25, 36, 49]
[1, 4, 9, 16, 25, 36, 49, 64]
[1, 4, 9, 16, 25, 36, 49, 64, 81]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

使用函数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]

对数字列表执行简单的统计计算:min(),max()和sum()

>>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> min(digits)
0 
>>> max(digits)
9 
>>> sum(digits)
45

列表解析:列表解析让你只需编写一行代码就能生成这样的列表。列表解析 将for 循环和创建新元素的代码合并成一行,并自动附加新元素

>>>squares = [value**2 for value in range(1,11)]
>>>print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

切片:要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range() 一样,Python在到达你指定的第二个索引前面的元素后停止。要输出列表中的前三个元素,需要指定索引0~3,这将输出分别为0 、1 和2 的元素

>>>players = ['charles', 'martina', 'michael', 'florence', 'eli']
>>>print(players[0:3])
['charles', 'martina', 'michael']

如果你没有指定第一个索引,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[-3:] :

>>>players = ['charles', 'martina', 'michael', 'florence', 'eli']
>>>print(players[-3:])
['michael', 'florence', 'eli']

遍历切片:如果要遍历列表的部分元素,可在for 循环中使用切片

>>> players = ['charles', 'martina', 'michael', 'florence', 'eli']
>>> for player in players[:3]:
...     print(player.title())
...
Charles
Martina
Michael

复制列表:要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:] )。这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个列表。

>>>my_foods = ['pizza', 'falafel', 'carrot cake']
>>>friend_foods = my_foods[:]
>>>print(friend_foods)
['pizza', 'falafel', 'carrot cake']

这种方法创建的friend_foods是个全新的列表与my_foods列表是独立的,而如果我们不用这个方法只是进行赋值操作friend_foods = my_foods,并不是创建了一个新的列表,只是将两个变量指向了同一个列表

反转列表:

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

其他切片操作:

>>> m[:10]#取前十个数
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> m[-10:]#取后十个数
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> m[10:20]#取前11-20个数
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> m[:10:2]#前十个数中,每2个数取一个
[0, 2, 4, 6, 8]
>>> m[5:15:3]#第6-15个数中,每3个数取一个
[5, 8, 11, 14]
>>> m[::10]#所有的数中,每10个数取一个
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> m[:]#什么都不写,可以原样复制一个list
[0, 1, 2, 3, 4, 5, 6, 7,……,99]

元组:列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组

元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样

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

元组是不能修改的,只能重新赋值,如果进行修改会报TypeError

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

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

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

虽然不能修改元组的元素,但可以给存储元组的变量赋值

>>> dimensions = (200, 50)
>>> print("Original dimensions:")
Original dimensions:
>>> for dimension in dimensions:
...     print(dimension)
...
200
50
>>> dimensions = (400, 100)
>>> print("Modified dimensions:")
Modified dimensions:
>>> for dimension in dimensions:
...     print(dimension)
...
400
100

元组和列表转换:

>>> players = ['charles', 'martina', 'michael', 'florence', 'eli']
>>> tupleplayers = tuple(players)
>>> print(tupleplayers)
('charles', 'martina', 'michael', 'florence', 'eli')
>>> listplayers = list(tupleplayers)
>>> print(listplayers)
['charles', 'martina', 'michael', 'florence', 'eli']

 

你可能感兴趣的:(Python基础之列表)