文章目录
前言
在Python编程语言中,列表是一种极其重要且功能强大的数据结构。列表允许我们组织和操作一系列有序的数据项,这些数据项可以是任何类型的Python对象,包括但不限于整数、浮点数、字符串甚至其他的列表。列表的一个显著特点是它们是可变的,这意味着我们可以随时向列表中添加新元素或修改现有元素。此外,列表还提供了丰富的内置方法,用于执行各种操作,如排序、反转、查找元素等。由于其灵活性和便捷性,列表成为了Python程序员在处理数据集合时的首选工具之一。接下来的文章中,我们将深入探讨列表的各种特性和如何有效地利用它们来解决实际问题。
一、啥是列表
前言部分其实已经介绍了,列表是由一系列特定顺序排列的元素组成,Python中使用放括号 [] 表示列表,使用逗号分隔其中的元素。
,下面是一些编程语言组成的列表,排名不分先后哈(在笔者心中都是很好的编程语言,没有谁有谁劣之分,都有自己的适用场景)
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
print(languages)
列表是有序集合,随机访问列表中的任何元素,只需要知道索引位置即可。
比如要访问列表的第一个元素,索引是从0开始的,其他语言也是如此。
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
print(languages[0])
print(languages[1])
print(languages[2])
通过将索引指定为-1,我们可以访问Python列表的最后一个元素
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
print(languages[-1])
二、修改、添加、删除元素
修改元素
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
languages[0] = "Php"
print(languages)
以上命令是把第一个位置的元素修改成Php
可以修改替换任意索引位置的元素
添加元素
列表末尾追加元素
languages = ["Java", "C++", "JavaScript", "Ruby"]
print(languages)
languages.append("Python")
print(languages)
可以看到在末尾追加了Python元素
列表中插入元素
languages = ["Java", "C++", "JavaScript", "Ruby"]
print(languages)
languages.insert(1, "Python")
print(languages)
可以看到Python元素插入到第二个元素的位置,原来的第二个元素C++则后移一位
删除元素
del删除元素
languages = ["Java", "C++", "JavaScript", "Ruby"]
print(languages)
del languages[0]
print(languages)
del可以删除任意位置的元素,知道索引位置即可
del语句把值从列表删除后,无法再访问了
pop()弹出元素
-
有时我们需要把元素从列表弹出,并且接着使用它们
-
pop()方法提供这样的功能,从列表末尾弹出元素,并返回该元素
-
pop()方法不传索引,则从列表末尾按顺序弹出,传入索引则弹出索引值位置的元素,即pop方法也可以删除任意位置的元素
languages = ["Java", "C++", "JavaScript", "Ruby"]
print(languages)
languages.pop()
print(languages)
languages.pop(1)
print(languages)
del和pop方法的选择
从列表删除一个元素,不再使用,则用del
从列表删除元素后继续使用,使用pop()
remove()删除元素
有时我们不知道要删除元素的索引位置,只知道待删除元素的值,那就可以使用remove()方法
languages = ["Java", "C++", "JavaScript", "Ruby"]
print(languages)
languages.remove("JavaScript")
print(languages)
代码中移除了值为JavaScript的元素
注:remove()方法只移除第一个指定的值,若移除的元素在列表中有多个,需要使用循环删除
三、列表管理
创建的列表通常是无序的,但我们经常会需要对列表元素进行排序,Python提供了很多列表的排序方法。
sort()排序
fruits = ['banana', 'apple', 'cherry']
fruits.sort()
print(fruits)
可以看到列表按照字母顺序排序了,想按照相反的顺序排序,参数传入 reverse=True
fruits.sort(reverse=True)
这个排序,对列表的修改是永久的
sorted()临时排序
上面说到sort()排序是永久的,Python还提供了一种临时排序的方法 sorted()
fruits = ['banana', 'apple', 'cherry']
print(sorted(fruits))
print(fruits)
打印结果可以看到,sorted()方法只是对原列表进行了临时排序,并没有改变原列表的顺序。
另外,sorted()方法也支持按字母顺序相反排序,参数传入 reverse=True
fruits = ['banana', 'apple', 'cherry']
print(sorted(fruits, reverse=True))
print(fruits)
reverse()反向打印列表
注意reverse()方法,并不对列表排序,只是按照相反顺序排列,是永久改变原列表顺序
cars = ['bmw', 'subaru', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)
列表长度len()
cars = ['bmw', 'subaru', 'toyota', 'subaru']
print(len(cars))
获取Python中列表长度,我们使用len()函数,即列表有多少个元素,长度就是多少
四、列表操作
列表循环
以下代码展示的是循环打印汽车品牌列表中的每个元素,非常简单
cars = ['bmw', 'subaru', 'toyota', 'subaru']
for car in cars:
print(car)
for循环的格式如下:
for item in list_of_items:
list_of_items是待循环的列表,item即代表列表中的单个元素
,我们可以对item进行其他操作
for car in cars:
print(car)
代码中的这个print(car)是需要缩进的,否则运行会报错,而且一般IDE编辑器也会提示我们,不用担心。比如下面的就会报错
for car in cars:
print(car)
还有时候我们进行了一些不必要的缩进,也会有错误提示,如下
cars = ['bmw', 'subaru', 'toyota', 'subaru']
print(cars)
cars = ['bmw', 'subaru', 'toyota', 'subaru']
for car in cars:
print(car)
print("汽车品牌循环结束")
上面的代码虽然没有报错,但是第二个print()我们是不需要循环打印的,所以不应该缩进,缩进就意味着属于for循环内的操作
一开始我们可能不太容易记住这种缩进问题,写多了自然就会记住。一般我们使用IDE工具时都会提示我们格式错误,可以使用代码格式化操作来修复格式问题。
数值列表
range()函数
for i in range(1, 5):
print(i)
range()函数让Python从指定的第一个值开始数,并在到达指定的第二个值时停止,因此输出不包含第二个值,可以理解取值范围是[1,5)
如果只写一个正整数数字,则从0开始,最后一个值仍然是比正整数少1
for i in range(5):
print(i)
range()函数创建数值列表
numbers_list = list(range(1, 5))
print(numbers_list)
range()函数还有一种用法,即指定步长,请看下面的示例
numbers_list = list(range(1, 8, 3))
print(numbers_list)
即从第一个数开始,根据指定的第三个数,依次增加,结果必须小于第二个参数
下面是一个列表循环求平方,追加到列表中并打印的操作
numbers_list = list(range(1, 9, 3))
squares = []
for number in numbers_list:
squares.append(number ** 2)
print(squares)
列表推导式
上面代码我们稍作修改
squares = [value ** 2 for value in range(1, 11, 3)]
print(squares)
可以看到用一行代码就完成了前面三四行代码才能完成的操作
立方列表推导式如下,完成1到10整数的立方列表生成
squares = [value ** 3 for value in range(1, 11)]
print(squares)
另外还有一些常用的数值列表统计函数
numbers_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(min(numbers_list))
print(max(numbers_list))
print(sum(numbers_list))
切片列表
在Python中,切片(slicing)是一种从序列(如字符串、列表、元组等)中提取子序列的方法。切片的基本语法是sequence[start:stop:step],其中:
- start:切片的起始位置(包含),默认为0。
- stop:切片的结束位置(不包含),默认为序列的长度。
- step:步长,即每次跳过的元素个数,默认为1。
创建切片
创建切片,可指定要使用的第一个元素索引和要切片的长度,范围和range()一样,不包含右侧元素,下面的示例演示了取出列表前三个元素的方式,初始索引为0,长度为3
car_list = ["Toyota", "Honda", "BMW", "Ford", "Audi", "Mercedes", "Tesla", "Volvo", "Nissan"]
print(car_list[0:3])
其实,起始索引和结束序列长度是可以省略的
car_list = ["Toyota", "Honda", "BMW", "Ford", "Audi", "Mercedes", "Tesla", "Volvo", "Nissan"]
print(car_list[:4]) # 输出['Toyota', 'Honda', 'BMW', 'Ford']
print(car_list[4:]) # 输出['Audi', 'Mercedes', 'Tesla', 'Volvo', 'Nissan']
print(car_list[:]) # 输出['Toyota', 'Honda', 'BMW', 'Ford', 'Audi', 'Mercedes', 'Tesla', 'Volvo', 'Nissan']
car_list[:4] 提取了列表的前4个元素。
car_list[4:] 提取了从第5个元素开始到列表末尾的所有元素。
car_list[:] 复制了整个列表。
元组
列表适合存储在程序运行期间可能变化的数据集。
元组在Python中指不可修改的值,即不可变列表。
元组定义
元组使用圆括号来标识
# 创建一个空元组
empty_tuple = ()
创建多个元素的元组
# 创建包含多个元素的元组
tuple1 = (1, 2, 3)
tuple2 = ('a', 'b', 'c')
tuple3 = (1, 'a', 3.14) # 可以包含不同类型的元素
还可使用tuple函数创建
# 使用tuple()函数创建元组
# 从列表创建元组
tuple4 = tuple([1, 2, 3])
print(tuple4)
# 从字符串创建元组
tuple5 = tuple("hello")
print(tuple5)
注意:严格来说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、清晰。如果你要定义一个只包含一个元素的元组,则必须在这个元素的后面加上逗号
:
my_t = (4,)
创建一个只包含一个元素的元组一般没有意义,但是自动生成的元组可能只有一个元素。
tuple_error = (1)
print(tuple_error)
tuple1 = (1,)
print(tuple1)
代码打印结果可以看到,元组即使只有一个元素,也要加逗号,否则创建的就不是元组
元组遍历
my_tuple = (1, 2, 3, 4, 5)
for item in my_tuple:
print(item)
元组变量重新赋值
my_tuple = (1, 2, 3, 4, 5)
print(my_tuple)
my_tuple = (6, 7, 8, 9, 10)
print(my_tuple)
元组中的元素虽然不能修改,但是元组变量可以重新赋值
对于列表而言,元组是更为简单的数据结构。如果需要存储一组在程序的整个生命周期都不变的值,可以使用元组。
总结
本文主要介绍了列表的管理和操作方式,以及元组的概念和操作方式,通过简单的代码示例展示了Python中基础常用的数据结构。本文是为后面的进阶内容,打好基础而撰写的。应该多动手操作代码示例,加深理解。