编程语言
首页 > 编程语言> > Python 列表

Python 列表

作者:互联网

列表

列表可以存储成组的信息,可以包含几个元素,也可以包含数百万个元素,列表是用方括号来表示的

定义

列表由一系列按特定顺序排列的元素组成。元素之间可以没有任何关系。

通常命名列表使用复数单词,例如:letters、digits、names

方括号([])表示列表,并用逗号来分隔其中的元素

打印列表时,将打印列表的内部表示,包括方括号引号

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

>>> a = ["A"]
>>> print(a)
['A']

>>> a = ["A", 'B', 3]
>>> print(a)
['A', 'B', 3]

无论列表中的元素,字符串是用单引号还是双引号,直接打印列表时,输出的字符串都是用单引号来表示

访问列表元素

列表是有序集合,要访问列表的任何元素,只需要知道该元素的位置或者索引

方式:列表名称[索引]

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

当去访问列表元素时,会返回元素,而不返回 引号 与 方括号,这点与直接打印列表不一样

列表的索引是从 0 开始的

通过索引 -1 ,可以访问最后一个列表元素,以此类推,索引 -2 访问倒数第二个列表元素...

通过索引 -1,可以在不知道列表长度的情况下访问最后的元素,但如果列表是空的,则不能使用 索引-1 去访问

>>> motors = []
>>> motors[-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

修改、添加和删除列表元素

大多数列表都是动态的

修改列表元素

列表名[元素索引] = 新值

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

添加列表元素

在列表末尾添加元素 append()

在列表末尾添加元素的方法是:append()

>>> cycles.append('123')
>>> print(cycles)
['ducati', 'yamaha', 'suzuki', '123']

创建一个空列表,使用一系列 append() 添加元素

>>> motors = []
>>> motors.append('a')
>>> motors.append('b')
>>> motors.append('c')
>>> print(motors)
['a', 'b', 'c']

在列表中插入元素 insert()

在列表任何位置添加新元素的方法:insert(索引,值)需要指定新元素的 索引

这个方法会将添加位置后面既有的每个元素都右移一个位置

>>> motors.insert(0, '1')
>>> print(motors)
['1', 'a', 'b', 'c']
>>> motors.insert(-1, '2')
>>> print(motors)
['1', 'a', 'b', '2', 'c']

删除列表元素

可以根据 位置 或 值 来删除列表中的元素

del

知其位置,可以使用 del 删除

使用方法:del 列表名[索引]

>>> print(motors)
['1', 'a', 'b', '2', 'c']
>>> del motors[0]
>>> print(motors)
['a', 'b', '2', 'c']

使用 del 可删除任何位置处的列表元素,前提是知道元素的索引

使用 del 语句将元素在列表中删除以后,就无法再访问了

pop()

del语句删除后无法继续使用,但pop()删除后可以继续使用它的值,因为它会返回被删除的元素

pop()方法可删除列表末尾的元素,用一个变量接收,就能接着使用被删除的元素了,但是列表里已经没这个元素了

>>> poped_motor = motors.pop()
>>> print(poped_motor)
c
>>> print(motors)
['a', 'b', '2']

弹栈后,pop() 返回值是删除的值,所以用一个变量接收,就能接着使用了,如果不接收,其效果与 del 语句删除一样,并且 pop() 也能删除列表中任何位置的元素

使用方法:pop(索引)

>>> print(motors)
['a', 'b', '2']
>>> motors.pop(0)
'a'
>>> print(motors)
['b', '2']

若从列表中删除的元素不再使用,则使用 del语句

如果删除元素还要继续使用,则使用 pop(索引) 方法,若没有索引,默认删除栈顶元素

remove()

pop() 和 remove() 都返回删除的元素,区别是:

知道删除元素的索引,使用 pop()

知道删除元素的值,使用 remove()

>>> print(motors)
['b', '2']
>>> motors.remove('2')
>>> print(motors)
['b']

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

组织列表

永久性排序

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

>>> cars = ['b', 'a', 't', 's']
>>> cars.sort()
>>> print(cars)
['a', 'b', 's', 't']

sort默认是按字母顺序排列

若要逆序排列,则要给sort传入参数reverse = True,即 sort(reverse=True)

>>> cars = ['b', 'a', 't', 's']
>>> cars.sort(reverse=True)
>>> print(cars)
['t', 's', 'b', 'a']

若字母有大写

>>> cars = ['B', 'b', 'C', 'c']
>>> cars.sort()
>>> print(cars)
['B', 'C', 'b', 'c']

先排大写字母,再排小写字母

若还有数字,则先排数字,再排大写字母,最后排小写

>>> cars = ['B', 'b', 'C', 'c', '1', '2']
>>> cars.sort()
>>> print(cars)
['1', '2', 'B', 'C', 'b', 'c']

注意:使用sort()排序后输出时,步骤要分开

>>> scenics.sort()
>>> print(scenics)

# print(scenics.sort())

第4行那种方式输出结果是 None,只能是把两步分开。

临时性排序

方法 sorted() 能够按特定顺序显示列表顺序,同时不影响列表原始列表顺序,是临时性的排序

>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> print("original list:")
original list:
>>> print(cars)
['bmw', 'audi', 'toyota', 'subaru']
>>> print("the sorted list")
the sorted list
>>> print(sorted(cars))
['audi', 'bmw', 'subaru', 'toyota']
>>> print(cars)
['bmw', 'audi', 'toyota', 'subaru']

注意:列表调用函数 sorted() 后,原始列表元素的排列顺序并没有变

若要按字母逆序输出,也可传入参数 reverse = True

调用sorted()函数时,参数是 列表 ,reverse=True。这点与调用sort()不一样,列表是作为对象去调用 sort(),参数只有 reverse=True 可选

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

对列表倒序(不排序)

reverse() 不会让列表反向顺序排序,而只是倒着排列,是永久性的改变,若想恢复原状,只需再执行一次 reverse()

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

reverse() 与 sort(reverse=True) 虽然都是倒序,但是效果不一样,reverse()不是排序,只是单纯倒着排列列表,而 sort(reverse=True) 会倒序的方式按字母顺序排序列表

len()

获取列表的长度

>>> len(cars)
4

索引错误

IndexError

>>> motors = ['honda', 'yamaha', 'suzuki']
>>> motors[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

当列表为空时,使用 索引-1 会导致错误

>>> motors = []
>>> motors[-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

遍历列表

for循环

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

Python每次都从列表中取出一个变量,并将其存入临时变量中

编写for循环时,用于存储列表中每个值的临时变量,可指定为任何名称。

for item in list_of_items:
    ...

注意 for 后面有 :

使用复数命名列表,使用单数命名临时变量

>>> magicians = ['alice', 'david', 'carolina']
>>> for magician in magicians:
...     print(magician.title() + ", that was a great trick!")
... 
Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!

在 for 语句后面的每一个缩进的代码都是循环的一部分,且对列表中的每个值都会执行一次。

>>> 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.

print() 自带换行

缩进错误

Python 根据缩进判断代码行与前一个代码行的关系

IndentationError

数字列表

列表非常适合用于存储数字集合

range()方法

可以生成一系列数字

range(a, b) 让Python从 数字a 开始计数,到 数字b 停止,但不包含 数字b

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

range() 还可以指定 步长

range(2, 11, 2) 数字范围是 2到11(不包含11),步长是 2

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

创建数字列表

可以用 函数list()range()的结果 直接转换为列表

将 range() 作为 list() 的参数,返回值将是一个数字列表

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

将10个整数的平方加入到一个列表中

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

也可以用 range() 产生的数字循环存入临时变量,再使用 append() 将 临时变量乘方后的值 添加到 事先创建好的空列表 中

简洁一点,不使用临时变量,这样更简洁,但是易读性不如上面的思路:

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

简而言之,有以下两种方法:

numbers = list(range(1, 11))
# **************************
numbers1 = []
for value in range(1, 11):
    numbers1.append(value)

生成偶数和奇数列表:

odd_numbers = list(range(1, 21, 2))
even_numbers = list(range(2, 21, 2))

数字列表的统计计算函数

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

首先,指定一个 描述性的列表名

然后,指定一个 左方括号,并定义一个表达式该表达式用于生成要存储在列表中的值

最后,编写一个 for循环用于给表达式提供值,再加上 右方括号

切片

创建切片

指定要使用的第一个元素的索引和最后一个元素的索引加1,Python在到达第二个指定的元素后停止,不包含第二个指定的元素,例如 [0:3] 会输出 索引 0、1、2

>>> men = ['Bob', 'Jack', 'David', 'Mark', 'Sean', 'Lisa']
>>> print(men[0:3])
['Bob', 'Jack', 'David']

输出结果是一个 列表

若未指定第一个索引,将自动从列表开头开始

>>> print(men[:4])
['Bob', 'Jack', 'David', 'Mark']

若未指定第二个索引,则切片将包括第一个索引后面的所有元素

>>> print(men[2:])
['David', 'Mark', 'Sean', 'Lisa']

可以获取从特定位置到列表末尾的所有元素

负数索引返回离列表末尾相应距离的元素:

>>> print(men[-1:])
['Lisa']
>>> print(men[-3:])
['Mark', 'Sean', 'Lisa']

若要包含列表所有元素的切片,则是同时省略起始索引和终止索引 [:]

遍历切片

使用 for 循环遍历切片

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

利用切片复制列表

创建一个包含整个列表的切片赋值给新的列表就是复制列表,这个切片就是原列表的副本

>>> my_foods = ['pizza', 'falafel', 'carrot cake']

>>> friend_foods = my_foods[:]

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

若直接将列表赋值给另外一个列表,这样无法实现列表的复制

这样只是让两个变量指向了同一个列表

正确的复制是 将列表的副本存储到新的列表中,而副本通过切片来产生

friend_pizzas = pizzas[:]

标签:Python,cars,元素,motors,列表,索引,print
来源: https://www.cnblogs.com/seansheep/p/14357074.html