Python编程基础教程:列表和元组的应用

发布于:2023-10-25 ⋅ 阅读:(94) ⋅ 点赞:(0)

作者:禅与计算机程序设计艺术

1.背景介绍

Python的列表和元组都是非常重要的数据结构。列表和元组都是用来存储多个数据元素的容器。但是,二者之间的差异还是比较大的。本文将对比分析两者之间的特性、功能及应用场景,并结合具体案例,带领读者熟悉并掌握列表和元组的基本用法。
首先,先来看下列表和元组之间的区别。

  • 列表(list):
    • 是一种有序集合;
    • 可以存储重复的对象;
    • 列表中的元素可以通过索引进行访问、添加和删除;
    • 列表是可变的,因此可以动态地添加或者删除元素;
    • 使用方括号[]表示列表。例如:[1, ‘hello’, [True, False]]。
  • 元组(tuple):
    • 是一个不可变的有序集合;
    • 不可修改它的元素,只能读取;
    • 元组中的元素不能被修改或增加;
    • 使用圆括号()表示元组。例如:(‘apple’, 3.14, True) 。

由此可见,列表和元组在很多方面都有所不同。

2.核心概念与联系

  • 序列(sequence):数据项的集合,具有固定顺序,其中每个元素都有一个唯一的标识符。序列包括字符串、列表、元组、集合等。
  • 可变性(mutability):序列是否可以改变,换言之,序列是否可以修改其中的元素?例如,字符串序列可以更改,而列表序列则不可以。
  • 下标(index):序列中每一个元素都有对应的唯一的标识符,这个标识符称作下标。
  • 分片(slicing):通过指定起始和终止位置,能够从序列中取出一部分元素。分片语法形式为:start:stop:step,参数都可以省略,默认值分别为0、最后一个元素下标+1、1。例如my_list[0:3]会从序列my_list中截取元素的子集,从第0个元素到第三个元素。
  • 拆包(unpacking):指在赋值语句中,把一个序列的值拆成多变量赋值,例如a, b = (1, 2)。拆包只适用于元组、列表和字符串。
  • 迭代器(iterator):能够访问序列中的元素,但一次只能获取单个元素。迭代器可以用for循环遍历序列,或者用next方法获取序列的下一个元素。
  • 生成器表达式(generator expression):生成器表达式可以创建迭代器,语法与列表解析类似。生成器表达式可以节省内存空间,因为它不需要保存整个序列。

3.核心算法原理和具体操作步骤以及数学模型公式详细讲解

创建列表

创建空列表

创建空列表的方式如下:

empty_list = [] # 创建空列表

创建一个包含0个元素的列表,如下所示:

zero_list = list()
print(type(zero_list))   # <class 'list'>
print(len(zero_list))    # 0

创建包含1个元素的列表,如下所示:

one_list = ['hello']
print(type(one_list))    # <class 'list'>
print(len(one_list))     # 1

创建包含多个元素的列表,如下所示:

many_list = ['apple', 'banana', 'orange', 'grape']
print(type(many_list))       # <class 'list'>
print(len(many_list))        # 4

通过数字创建列表

如果要从数字0开始创建列表,可以使用内置函数range()和map(),如下所示:

num_list = list(map(str, range(10)))
print(num_list)              # ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

也可以直接使用列表推导式,如下所示:

num_list = [str(i) for i in range(10)]
print(num_list)              # ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

还可以设置步长,比如每隔两个元素取一个值,即步长为2,如下所示:

two_list = list(map(str, range(0, 10, 2)))
print(two_list)             # ['0', '2', '4', '6', '8']

从字符串或其它序列类型创建列表

如果要从其他序列类型如字符串或元组等创建列表,可以使用以下方式:

string_list = list("Hello World")
print(string_list)            # ['H', 'e', 'l', 'l', 'o','', 'W', 'o', 'r', 'l', 'd']

tuple_list = list(('apple', 3.14, True))
print(tuple_list)             # ['apple', 3.14, True]

这样就能很方便地从字符串或元组创建列表了。

将列表转换为元组

使用tuple()函数将列表转换为元组,如下所示:

old_list = ["apple", "banana", "orange"]
new_tuple = tuple(old_list)
print(new_tuple)             # ('apple', 'banana', 'orange')

这样就完成了列表到元组的转换。

获取元素

获取列表中的特定元素

列表中的元素可以通过索引进行访问,索引从0开始计数,并且可以支持负数索引,以表示倒数第几个元素。

fruits = ['apple', 'banana', 'orange']
print(fruits[0])             # apple
print(fruits[-1])            # orange

如果索引超出了范围,会报IndexError异常。

切片操作

列表支持切片操作,返回一个新的列表,包含指定范围的元素。语法形式为list[start:end:step],其中start、end和step均为可选参数。如果省略start,默认为0;如果省略end,默认为序列末尾元素下标+1;如果省略step,默认为1。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sub_list = numbers[2:8:2]   # 从第三个元素到第八个元素(不包括),每隔两个元素取一个值
print(sub_list)             # [3, 5, 7]

可以用切片操作去掉列表头部或尾部的元素,例如:

fruits = ['apple', 'banana', 'orange', 'grape', 'pear']
new_list = fruits[1:-1]      # 去掉第一个元素和最后一个元素
print(new_list)             # ['banana', 'orange', 'grape']

迭代器操作

可以使用for循环和next()方法遍历列表中的元素,这种方式称作迭代器操作。

colors = ['red', 'green', 'blue', 'yellow']
for color in colors:
    print(color)

输出结果:

red
green
blue
yellow

还可以使用迭代器操作获取列表中的元素,如下所示:

colors = ['red', 'green', 'blue', 'yellow']
it = iter(colors)           # 创建迭代器
while True:
    try:
        color = next(it)     # 获取下一个元素
        print(color)
    except StopIteration:
        break                # 没有更多的元素时退出循环

输出结果:

red
green
blue
yellow

添加元素

在列表末尾添加元素

使用append()方法可以在列表末尾添加一个元素,如下所示:

fruits = ['apple', 'banana', 'orange']
fruits.append('grape')
print(fruits)               # ['apple', 'banana', 'orange', 'grape']

插入元素

使用insert()方法可以在任意位置插入一个元素,如下所示:

fruits = ['apple', 'banana', 'orange']
fruits.insert(1, 'grape')   # 在第二个元素之前插入'grape'
print(fruits)               # ['apple', 'grape', 'banana', 'orange']

删除元素

删除列表中所有元素

使用clear()方法可以清空列表中的所有元素,如下所示:

fruits = ['apple', 'banana', 'orange']
fruits.clear()
print(fruits)               # []

删除列表中特定元素

使用remove()方法可以删除列表中指定的元素,如下所示:

fruits = ['apple', 'banana', 'orange', 'grape', 'pear']
fruits.remove('banana')
print(fruits)               # ['apple', 'orange', 'grape', 'pear']

remove()方法只删除第一次出现的元素,如果需要删除其他元素,需要使用while循环配合pop()方法,如下所示:

fruits = ['apple', 'banana', 'orange', 'grape', 'pear']
while 'orange' in fruits:   # 如果存在orange元素,则删除
    fruits.remove('orange')
print(fruits)               # ['apple', 'grape', 'pear']

根据值删除元素

使用del语句可以根据值的位置删除元素,如下所示:

fruits = ['apple', 'banana', 'orange', 'grape', 'pear']
del fruits[1]               # 删除第二个元素
print(fruits)               # ['apple', 'orange', 'grape', 'pear']

也可以通过遍历列表来查找并删除特定元素,如下所示:

fruits = ['apple', 'banana', 'orange', 'grape', 'pear']
to_delete = 'orange'
if to_delete in fruits:      # 查找元素是否存在
    index = fruits.index(to_delete)
    del fruits[index]         # 删除元素
print(fruits)               # ['apple', 'banana', 'grape', 'pear']

修改元素

替换元素

使用replace()方法可以替换列表中的特定元素,如下所示:

fruits = ['apple', 'banana', 'orange', 'grape', 'pear']
fruits.replace('orange', 'watermelon')
print(fruits)               # ['apple', 'banana', 'watermelon', 'grape', 'pear']

replace()方法仅替换列表中第一次出现的元素。

更新列表

使用update()方法可以更新列表,如下所示:

old_list = ['apple', 'banana', 'orange']
new_list = ['pear', 'pineapple', 'grape']
old_list.update(new_list)    # 把new_list的内容加入到old_list中
print(old_list)              # ['apple', 'banana', 'orange', 'pear', 'pineapple', 'grape']

update()方法不会修改old_list,而是返回一个新的列表。

对列表排序

sort()方法

sort()方法可以对列表进行升序排序,如下所示:

unsorted = [5, 2, 8, 3, 9, 1]
unsorted.sort()             # 对unsorted列表进行升序排序
print(unsorted)             # [1, 2, 3, 5, 8, 9]

如果要反转排序方向,可以使用reverse=True参数,如下所示:

unsorted = [5, 2, 8, 3, 9, 1]
unsorted.sort(reverse=True)
print(unsorted)             # [9, 8, 5, 3, 2, 1]

sorted()函数

sorted()函数可以创建并返回一个新列表,包含原列表的排序版本。sort()方法只是在原列表上修改,而sorted()函数总是返回一个新的列表,包含原列表的排序版本。

unsorted = [5, 2, 8, 3, 9, 1]
sorted_list = sorted(unsorted)
print(sorted_list)          # [1, 2, 3, 5, 8, 9]
本文含有隐藏内容,请 开通VIP 后查看

网站公告


今日签到

点亮在社区的每一天
去签到