Python列表、元组大总结

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

列表定义及特点

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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值