Python列表、元组大总结

本文详细介绍了Python的列表和元组,包括列表的定义、特点、创建数字列表、列表解析、切片、元素操作、排序、反转以及元组的定义、特点、连接和删除。重点阐述了列表的修改、添加、删除元素以及列表与元组之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列表定义及特点

Python的列表是有序的,是包含0个或多个元素的有序序列,属于序列类型。列表可以进行修改。

由于列表属于序列类型,故继承了序列类型的所有属性和方法。

可以使用比较操作符(如 > 或 < 等)对列表进行比较。

列表用方括号 [] 表示,用逗号分隔其中的元素,也可以通过 list() 函数将元组或字符串转换为列表,直接使用 list() 函数会返回一个空列表。

print(list('av892%#@'))
>>>['a', 'v', '8', '9', '2', '%', '#', '@']

在列表中,值可以是任何数据类型,被称为元素或项。列表没有长度限制,因为元素类型可以不同,所以不需要预先定义列表长度。

Python可以通过元素在列表中所占的位置进行访问,即对列表中所有元素按序编号(称为索引),从而实现对列表的操作。列表的索引是从0开始的,以此类推。

操作列表

使用range()创建数字列表

要创建数字列表,使用函数list()将range()的结果直接转换为列表。

numbers=list(range(1,6))
print(numbers)

输出结果:

[1, 2, 3, 4, 5]

even_numbers=list(range(2,11,2)) #第三个参数指定步长
print(even_numbers)

输出结果:

[2, 4, 6, 8, 10]

列表解析***

列表解析将 for 循环和创建新元素的代码合并成一行,并自动附加新元素。只需要编写一行代码就能生成列表,非常简洁!!!

squares=[value**2 for value in range(1,11)]
print(squares)
>>>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
lis=[2.3, 3.4, 4.5, 5.6, 6.7]
print([int(x)**2 for x in lis])  #打印 lis 中所有数的平方
print([int(x)**2 for x in lis if int(x)%2==0])  #只打印 lis 转换为整数后其中所有偶数的平方
>>>[4, 9, 16, 25, 36]
[4, 16, 36]
lista = [i for i in range(7) if i%2 != 0]
listb = [2*i+1 for i in range(7) if i%2 != 0]
print(lista)
print(listb)
>>>[1, 3, 5]
[3, 7, 11]

列表解析还可运用于处理输入的字符串:

例:输入一行以空格分隔的年龄,打印这些年龄的总和以及平均年龄

ages = [eval(x) for x in input('请输入:').split()]
s = sum(ages)
m = s/len(ages)
print(f"{s} {m:.1f}")

输入内容以及输出结果:

请输入:22 23 24
69 23.0

列表切片及遍历切片

列表可以使用下标索引来访问列表中的元素,也可以使用类似于字符串切片运算的形式截取列表中的元素。

列表的第一个元素的索引为0,第二个元素的索引为1,根据这种简单的计数方式,可以通过形如 list [ index ] 来访问列表的任何一个元素。

创建切片,应使用切片运算符 list [ i : j ] 或者 list [ i : j : k ] ,前者返回列表中从索引 i (包括 i )到索引 j (不包括 j )之间的元素。后者在前者的基础上,要间隔 k 个元素,k 为正数表示从左往右截取,k 为负数表示从右往左截取。其中的 i 和 j 可以省略。

lis = [1,2,3,4,5,6,7,8,9,10]
lis[8:2:-2]
>>>[9, 7, 5]

lis[4:9:3]
>>>[5, 8]

lis[::-1]
>>>[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

lis[::1]
>>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

通过 for 循环可以遍历列表的切片,如下:

players=['charles','martina','michael','florence','eli']
print('Here are the first three players on my team:')
for player in players[:3]:
    print(player.title())

输出结果:

Here are the first three players on my team:
Charles
Martina
Michael

修改、添加和删除元素

作用代码备注
在列表末尾添加元素list.append(xx)能保存到list中,同下
在列表中插入元素list.insert(index,xx)index指的是插入到的位置索引
使用del语句删除元素del list[index]或者del(list[index])index指要删除元素的索引,注意是方括号!!可以删除整个列表(del list)
使用pop()方法删除元素list.pop()pop可以理解为“弹出”,如下。默认弹出末尾元素。
根据值删除元素list.remove(xx)xx指要删除的值,注意如果xx出现多次,只删除第一个xx
  • 方法pop()

如果需要将元素从列表中删除,并接着使用它的值,可以用pop()进行操作。
方法pop()默认删除末尾元素,并接着使用它,也可以指定要删除元素的索引。注意每次使用pop()时,被弹出的元素就不再在列表中!

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

popped_motorcycle=motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)

first_owned=motorcycles.pop(0)
print(motorcycles)
print(first_owned)

输出结果:

[‘honda’, ‘yamaha’, ‘suzuki’]
[‘honda’, ‘yamaha’]
suzuki
[‘yamaha’]
honda

对列表排序、反转打印

作用代码备注
对列表永久排序list.sort(reverse)永久性修改 list 的排列顺序,无法恢复原来的顺序,默认为升序,参数 reverse=True 时为降序
对列表临时排序sorted(list,reverse)临时排序,并返回排序后的列表副本,不影响列表的原始顺序,默认为升序,参数 reverse=True 时为降序
反转列表元素list.reverse()也就是倒着打印列表,永久性修改列表原始排列顺序,但可以通过再次调用reverse()恢复

注:1. sort 方法和 sorted 函数可以使用参数 key = list2.index 使列表按照 list2 列表中的顺序排序。(列表去重那里有例子)
2.以上排序方式针对大多数情况,有些列表排序要复杂些。

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

输出结果:

[‘audi’, ‘bmw’, ‘subaru’, ‘toyota’]

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

输出结果:

[‘toyota’, ‘subaru’, ‘bmw’, ‘audi’]

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

输出结果:

[‘audi’, ‘bmw’, ‘subaru’, ‘toyota’]
[‘bmw’, ‘audi’, ‘toyota’, ‘subaru’]

cars=['bmw','audi','toyota','subaru']
print(cars)
cars.reverse()  #第一次反转
print(cars)
cars.reverse()  #第二次反转
print(cars)

输出结果:

[‘bmw’, ‘audi’, ‘toyota’, ‘subaru’]
[‘subaru’, ‘toyota’, ‘audi’, ‘bmw’]
[‘bmw’, ‘audi’, ‘toyota’, ‘subaru’]

list.sort()还有一种指定某位置排序的高级功能(使用lambda):

names = '护士 旅游 老师 护士 老师 老师'
lis = names.split(' ')
d = {}
for i in lis:
    d[i] = d.get(i,0) + 1
content = list(d.items())
content.sort(key = lambda x:x[1] ,reverse = True)  #以元组的第二个元素进行排序
for i in content:
    print(f"{i[0]}:{i[1]}")

输出结果:

老师:3
护士:2
旅游:1

复制列表[:]

方法:创建一个包含整个列表的切片,同时省略起始索引和终止索引即[:]。注意不能直接将该列表名称赋值为另一个列表名称,否则不能得到两个列表!!

my_foods=['pizza','falafel']
friend_foods=my_foods[:]  #第一种(正确)
print('my favorite foods are:')
print(my_foods)
print("\nmy friend's favorite foods are:")
print(friend_foods)

print('\n#为核实确实有两个列表,为每个列表添加相应人员喜欢的食品:')
my_foods.append('cannoli')
friend_foods.append('ice cream')
print('my favorite foods are:')
print(my_foods)
print("\nmy friend's favorite foods are:")
print(friend_foods)

输出结果:

my favorite foods are:
[‘pizza’, ‘falafel’]

my friend’s favorite foods are:
[‘pizza’, ‘falafel’]

#为核实确实有两个列表,为每个列表添加相应人员喜欢的食品:
my favorite foods are:
[‘pizza’, ‘falafel’, ‘cannoli’]

my friend’s favorite foods are:
[‘pizza’, ‘falafel’, ‘ice cream’]

my_foods=['pizza','falafel']
friend_foods=my_foods  #第二种(此处不正确)
print('\n#如果使用friend_foods=my_foods,为每个列表添加相应人员喜欢的食品:')
my_foods.append('cannoli')
friend_foods.append('ice cream')
print('my favorite foods are:')
print(my_foods)
print("\nmy friend's favorite foods are:")
print(friend_foods)

输出结果:

#如果使用friend_foods=my_foods,为每个列表添加相应人员喜欢的食品:
my favorite foods are:
[‘pizza’, ‘falafel’, ‘cannoli’, ‘ice cream’]

my friend’s favorite foods are:
[‘pizza’, ‘falafel’, ‘cannoli’, ‘ice cream’]

这里的friend_foods=my_foods意思是将my_foods赋给friend_foods,而不是将my_foods的副本赋给friend_foods,这种语法实际上是让python将新变量friend_foods关联到已与my_foods相关联的列表,因此这两个变量指向同一个变量。

其他常用操作方法/内建函数

内建函数含义
len(list)返回列表元素的个数
max(list)返回列表元素的最大值
min(list)返回列表元素的最小值
sum(list)返回数字列表元素的总和
方法含义
list.count(a)返回某个元素 a 在列表中出现的次数
list.extend(b)在列表 list 末尾一次性追加另一个数据类型 b 中的所有元素,用于扩展列表,b 可以为列表、字符串、元组、集合、字典等。若 b 为集合,则追加的是所有键。
list.index(a)返回列表中第一次出现的元素 a 的索引,如 a 不存在则报错。
list.clear()用于清空列表
list.copy()用于复制列表
a = [1,2]
b = [3,4]
a.extend(b)
a
>>>[1, 2, 3, 4]

c = (5,6)
a.extend(c)
a
>>>[1, 2, 3, 4, 5, 6]

d = '78'
a.extend(d)
a
>>>[1, 2, 3, 4, 5, 6, '7', '8']

e = {'i','j'}
a.extend(e)
a
>>>[1, 2, 3, 4, 5, 6, '7', '8', 'j', 'i']

f = {'g':1,'h':3}
a.extend(f)
a
>>>[1, 2, 3, 4, 5, 6, '7', '8', 'j', 'i', 'g', 'h']

列表元素检查

lis = [1,2,3,4,5]
print(1 in lis)
print(3 not in lis)
print(8 in lis)
print(9 not in lis)

>>>True
False
False
True

列表的更新

lis = ['a','b', 4, 5]
print(lis[2])

lis[2] = 'c'   # 对列表的数据项进行更新
print(lis)
print(lis[2])

>>> 4
['a', 'b', 'c', 5]
c

列表去重

第一种方法,使用集合转换函数set()实现列表去重(但是会改变原来的顺序)

lis = ['a', 'c', 'd', 5, 3, 'c', 5]
list(set(lis))
>>>[3, 5, 'c', 'a', 'd']

第二种方法,使用 sorted() 进行改进(不会改变原来的顺序)

lis = ['a', 'c', 'd', 5, 3, 'c', 5]
sorted(list(set(lis)), key = lis.index)
>>>['a', 'c', 'd', 5, 3]

列表大小比较

列表之间可以用比较运算符 > 、< 来进行比较!进行比较时首先会比较两个列表的第一个值,如果能进行判断则返回判断结果,如果不能则比较两个列表的第二个值,以此类推。

print([66,-5] > [66])   # true
print([66,0] > [66])    # true
print([1,2] > [5])     # false
print([5,8] > [1])    # true
print('-------')
print([44,8,9] > [99])   # false
print([1,4,6] > [1,9])  # false
print([1,2,3] > [1,2])  # true
print([1,2,0] > [8,2])  # false

输出结果:

True
True
False
True
-------
False
False
True
False

元组

元组定义及特点

元组与列表相似,不同之处在于元组的元素不能修改。

严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果要定义一个只包含一个元素的元组,必须在这个元素后面加上逗号。如下所示:

n=(3)
print(type(n))
>>> <class 'int'>
n1=(3,)
print(type(n1))
>>> <class 'tuple'>

创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。

元组的创建语法非常简单:若用逗号分隔一些数据,系统会自动创建元组。也可以用圆括号进行标注。

连接、删除元组

元组的元素值是不允许修改的,但是可以对元组进行连接。

tuple1 = (1,2,3)
tuple2 = (4,5,6)
tuple1 + tuple2
>>>(1, 2, 3, 4, 5, 6)

元组的元素值是不允许删除的,但是可以使用 del 语句删除整个元组。

tuple1 = (1,2,3)
del tuple1
tuple1
>>>
NameError    Traceback (most recent call last)
<ipython-input-43-913694074add> in <module>
      1 tuple1 = (1,2,3)
      2 del tuple1
----> 3 tuple1

NameError: name 'tuple1' is not defined

将列表转换为元组

lis = ['a','b','c']
tuple(lis)
>>>('a', 'b', 'c')
<think>好的,我现在需要回答用户关于Python列表元组的问题。用户希望得到结构清晰的中文解释,并且需要遵循特定的格式要求,比如行内公式用$...$,独立公式用$$...$$。首先,我得回忆一下列表元组的基本概念,然后比较它们的异同点,可能还需要举一些例子来说明。 首先,列表元组都是Python中的序列类型,可以存储多个元素。但列表是可变的,而元组是不可变的。这一点非常重要,可能需要详细说明。比如,列表可以添加、删除或修改元素,而元组一旦创建就不能改变。这会影响它们在程序中的使用场景,比如元组适合用于不应被修改的数据,如坐标、日期等,而列表适合需要动态调整的情况。 然后,我需要考虑语法上的区别。列表使用方括号[],元组使用圆括号()。不过,创建单个元素的元组时,需要在元素后面加逗号,比如(1,),否则会被识别为普通括号。这一点容易出错,应该举例说明。 接下来是性能方面的比较。由于元组不可变,它们在内存中的存储更为高效,访问速度可能更快。如果需要处理量数据且不需要修改,使用元组可能更好。这里可能需要提到Python的优化机制,比如元组的静态特性使得它们在某些情况下比列表更高效。 另外,元组可以用作字典的键,而列表不行,因为字典的键必须是不可变的类型。这也是一个重要的区别,应该举例说明,比如字典的键使用元组的情况。 在应用场景方面,列表适用于需要频繁修改的情况,比如数据收集、动态调整元素;元组适用于数据不变的情况,比如配置项、函数返回多个值等。例如,函数返回多个值时通常会打包成元组,而接收时可以解包到多个变量。 关于元素类型,两者都可以存储不同类型的元素,比如一个列表可以同时包含整数、字符串、甚至其他列表元组。不过,这可能不是重点,但可以简单提及。 然后需要考虑用户可能的疑问,比如如何选择使用列表还是元组,或者两者之间的转换。例如,列表可以通过tuple()函数转换为元组元组可以通过list()转换为列表。这种转换在需要修改元组时可能有用。 在示例方面,应该展示列表元组的创建、操作,比如列表的append、remove方法,元组的不可变特性导致的错误尝试。例如,尝试修改元组元素会引发TypeError,而列表则可以正常修改。 还要注意用户提到的格式要求,所有的数学表达式需要用$...$,比如如果有涉及索引的公式,比如访问元素时的索引,可能需要用$x[0]$这样的格式。不过,可能在这部分内容中数学公式较少,但如果有涉及的话要正确应用。 检查是否有遗漏的重要点,比如内存分配、性能测试数据,或者更深入的解释,比如为什么元组不可变会带来性能优势。可能需要提到Python内部对元组的优化,比如缓存更简单的数据结构,使得元组在创建访问时更快。 最后,要确保回答结构清晰,分点说明,可能分为定义与特性、语法差异、可变性、性能、应用场景、转换方法等部分。每个部分用简洁的中文解释,并附上示例代码,注意代码中的变量名用中文可能不太合适,所以保持英文变量名,但注释可以用中文。 需要确保LaTeX语法正确,比如在提到列表索引时,如果使用公式,比如访问第一个元素用$lst[0]$,但可能更倾向于用代码块来展示。不过用户提到行内数学表达式需要用$...$,所以变量名或者类似的内容可能需要用这种方式。 总结一下,回答的结构应该是: 1. 定义与基本特性 - 列表:可变,方括号 - 元组:不可变,圆括号 2. 语法差异 - 创建方式 - 单元素元组的注意事项 3. 可变性对比 - 列表操作方法(增删改) - 元组的不可变性示例 4. 性能比较 - 内存速度优势 5. 应用场景 - 各自适合的情况 6. 转换方法 - list()tuple()函数 7. 示例代码 - 创建、操作、转换的例子 在写作过程中,要确保每个部分简明扼要,避免冗长,同时覆盖关键点。需要注意用户可能对可变性带来的影响不太清楚,比如为什么不可变类型可以作为字典的键,需要解释哈希机制的要求。 另外,是否要提到深层次的结构,比如列表元组可以嵌套?例如,列表中可以包含元组,反之亦然。这可能也是一个有用的点,可以简单说明。 最后,检查是否有错误,比如元组是否真的比列表快,或者在某些操作上更快。根据Python的文档,元组在创建遍历时确实更快,因为它们的不可变性允许更高效的内存分配。 现在,将这些思考整理成一个结构化的回答,确保符合用户的格式要求,特别是行内公式独立公式的正确使用。不过在这个问题中,可能数学公式较少,但如果有索引或类似的内容,可以用$...$包裹。</think>### Python列表元组详解 #### 1. **定义与基本特性** - **列表(List)** 列表Python中的**可变序列**,用方括号 `[]` 表示,可存储任意类型的元素,并支持动态增删改操作。 **示例**:`lst = [1, "apple", True]` - **元组(Tuple)** 元组是**不可变序列**,用圆括号 `()` 表示,创建后内容不可修改,适合存储固定数据。 **示例**:`tup = (2, "banana", False)` --- #### 2. **语法差异** - **创建方式** - 列表:`[元素1, 元素2, ...]` - 元组:`(元素1, 元素2, ...)` - **单元素元组**需加逗号:`(1,)`(否则会被识别为整数 `1`)。 - **元素访问** 两者均通过索引访问,如 `$lst[0]$` 或 `$tup[1]$`(索引从0开始)。 --- #### 3. **可变性对比** - **列表支持修改** ```python lst = [1, 2, 3] lst.append(4) # 添加元素 → [1, 2, 3, 4] lst[0] = 10 # 修改元素 → [10, 2, 3, 4] ``` - **元组不可修改** ```python tup = (1, 2, 3) tup[0] = 10 # 报错:TypeError(不可变) ``` --- #### 4. **性能比较** - **内存占用** 元组内存更紧凑(无需预留空间应对修改),适合存储量静态数据。 - **访问速度** 元组在创建遍历时更快(Python内部优化)。 --- #### 5. **应用场景** - **列表适用场景** - 数据需动态增删(如用户输入收集)。 - 需频繁修改元素(如排序、过滤)。 - **元组适用场景** - 数据需保持固定(如坐标 `(x, y)`)。 - 字典的键(需不可变性,如 `dict[(1, 2)] = "点"`)。 - 函数返回多个值(如 `return (status, data)`)。 --- #### 6. **相互转换** - **列表元组**:`tuple()` ```python lst = [1, 2, 3] tup = tuple(lst) # (1, 2, 3) ``` - **元组列表**:`list()` ```python tup = (4, 5, 6) lst = list(tup) # [4, 5, 6] ``` --- #### 7. **嵌套与混合使用** 两者可互相嵌套,灵活存储复杂数据: ```python # 列表中嵌套元组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值