第三章 列表简介

第三章 列表简介

第一章 起步
第二章 变量和简单数据类型
第三章 列表简介
第四章 操作列表
第五章 if 语句
第六章 字典
第七章 用户输入和 while 语句
第八章 函数
第九章 类
第十章 文章和异常
第十一章 测试代码



前言

你将要学习的列表能够让你在一个地方存储成组的信息(几个甚至几百万个元素)。列表是新手可直接食用的最强大的 Python 功能之一,它融合了众多重要的编程概念。


3.1 列表是什么

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

另外讲一个小技巧,由于列表通常包含多个元素,因此给列表指定一个表示复数的名称(如:letters、digits 或 names)是个不错的主意。

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

bicycles = ['trek', 'cannondale', 'specialized']
print(bicycle)
#输出为:
#['trek', 'cannondale', 'specialized']

3.1.1 访问列表元素

列表是有序集合,因此要访问列表的任意元素,只需将该元素的位置(索引)告诉 Python 即可。

3.1.2 索引从0而不是从1开始

在 Python 中,第一个列表元素的索引为0,而不是1。大多数编程语言都是如此规定(如 C 语言中的数组),这与列表操作的底层实现有关

bicycles = ['trek', 'cannondale', 'specialized']
print(bicycle[0])
print(bicycle[1])
print(bicycle[2])

输出为

trek
cannondale
specialized

相对于 C 语言,Python 还为访问最后一个列表元素提供了一种特殊语法:将最后一个元素的索引指定为-1(往前一个元素的索引就是-2、-3)

bicycles = ['trek', 'cannondale', 'specialized']
print(bicycle[-1])
print(bicycle[-2])
print(bicycle[-3])

输出为

specialized
cannondale
trek

3.1.3 使用列表中的各个值

本小节的意思就是你可以像使用其他变量一样使用列表中的各个值。例如用 f 字符串来创建消息:

bicycles = ['trek', 'cannondale', 'specialized', 'giant']
message = f"My first bicycle was a {bicycles[3].title()}."
print(message)

输出为

My first bicycle was a Giant.

动手试一试

names = ['GYH', 'ZSH', 'LWM', 'ZJ', 'YYJ']
print(names[0])
print(names[1])
print(names[2])
print(names[3])
print(names[4])
print('\n')

print(f"Hello!{names[0]}")
print(f"Hello!{names[1]}")
print(f"Hello!{names[2]}")
print(f"Hello!{names[3]}")
print(f"Hello!{names[4]}")
print('\n')

bicycles = ['trek', 'cannondale', 'specialized', 'giant']
print(f"I would like to own a {bicycles[3].title()} bicycle")

输出为

GYH
ZSH
LWM
ZJ
YYJ

Hello!GYH
Hello!ZSH
Hello!LWM
Hello!ZJ
Hello!YYJ

I would like to own a Giant bicycle

3.2 修改、添加和删除元素

你创建的大多数列表将是动态的,这意味着列表创建后,将随着程序的运行增删元素。

3.2.1 修改列表元素

修改列表元素 = 访问列表元素 + 赋值:

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

输出为

['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']

3.2.2 在列表中添加元素

  1. 在列表末尾添加元素
    在列表中添加新元素时,最简单的方法是将元素附加(append)到列表:

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

    输出为

    ['honda', 'yamaha', 'suzuki']
    ['honda', 'yamaha', 'suzuki', 'ducati']
    

    一种非常常见的创建列表的方式为先创建一个空列表,再使用一系列函数调用 append() 来添加元素
    之所以常见,是因为经常要等到程序运行后,你才知道用户要在程序中存储哪些数据。为控制用户,可首先创建一个空列表,用于存储用户要输入的值,然后将用户提供的每个新值添加到列表中。

    motorcycles = []
    motorcycles.append('honda')
    motorcycles.append('yamaha')
    motorcycles.append('suzuki')
    motorcycles.append('ducati')
    print(motorcycles)
    

    输出为

    ['honda', 'yamaha', 'suzuki', 'ducati']
    
  2. 在列表中插入元素
    使用方法 insert() 可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值:

    motorcycles = ['honda', 'yamaha', 'suzuki']
    print(motorcycles)
    motorcycles.insert(0, 'ducati')
    print(motorcycles)
    

    输出为

    ['honda', 'yamaha', 'suzuki']
    ['ducati', 'honda', 'yamaha', 'suzuki']
    

3.2.3 从列表中删除元素

  1. 使用 del 语句删除元素
    如果你知道要删除的元素在列表中的位置,可使用 del 语句(将无法再访问此元素):
    motorcycles = ['honda', 'yamaha', 'suzuki']
    print(motorcycles)
    del motorcycles[0]
    print(motorcycles)
    
    输出为
    ['honda', 'yamaha', 'suzuki']
    ['yamaha', 'suzuki']
    
  2. 使用方法 pop() 删除元素
    有时候你要将元素从列表中删除,并接着使用它的值。方法 pop() 删除列表末尾的元素,并让你能够接着使用它。术语弹出(pop)源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。
    motorcycles = ['honda', 'yamaha', 'suzuki']
    print(motorcycles)
    
    poped_motorcycle = motorcycles.pop()
    print(motorcycles)
    print(poped_motorcycle)
    
    输出为
    ['honda', 'yamaha', 'suzuki']
    ['honda', 'yamaha']
    suzuki
    
    那到这里有小伙伴可能要问了,这个 pop() 有什么用呢?假设列表中的摩托车是按购买时间存储的,就可以使用方法 pop() 打印一条消息,指出最新购买的是哪款摩托车:
    motorcycles = ['honda', 'yamaha', 'suzuki']
    
    last_owned = motorcycles.pop()
    print(f"The last motorcycle I owned was a {last_owned}.")
    
    输出为
    The last motorcycle I owned was a suzuki.
    
  3. 弹出列表中任何位置处的元素
    实际上,可以使用 pop() 来删除列表中任何位置的元素,只需在圆括号中指定要删除的索引即可🤡🤡🤡
    motorcycles = ['honda', 'yamaha', 'suzuki']
    
    first_owned = motorcycles.pop(0)
    print(f"The first motorcycle I owned was a {first_owned}.")
    
    输出为
    The first motorcycle I owned was a honda.
    
  4. 根据值删除元素(使用方法 remove() )
    motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
    print(motorcycles)
    
    too_expensive = 'ducati'
    motorcycles.remove(too_expensive)
    #或motorcycles.remove('ducati')
    print(motorcycles)
    print(f"\nA {too_expensive.title()} is too expensive for me.")
    
    输出为
    ['honda', 'yamaha', 'suzuki', 'ducati']
    ['honda', 'yamaha', 'suzuki']
    
    A Ducati is too expensive for me.
    
    注意:方法 remove() 只删除第一个指定的值,如果要删除的值可能在列表中出现多次,就需要使用循环来确保将每个值都删除,浙江在第七章中介绍。

动手试一试

guests = ['LWM', 'BFD', 'LYM']
print(f"I want {guests[0]},{guests[1]} and {guests[2]} would like to have dinner whith me.")
print("LWM can't come here!")
guests[0] = 'NWY'
print(f"I want {guests[0]},{guests[1]} and {guests[2]} would like to have dinner whith me.")
print("Then I find a bigger dining table.")
guests.insert(0, 'WF')
guests.insert(2, 'ZZL')
guests.append('ZSH')
print(f"I want {guests[0]},{guests[1]} ,{guests[2]},{guests[3]},{guests[4]} and {guests[5]} would like to have dinner whith me.")
print("But now I can only invite two people because the new bigger table can't delivered in time.")
poped_1 = guests.pop()
poped_2 = guests.pop()
poped_3 = guests.pop()
poped_4 = guests.pop()
print(f"I'm so sory that {poped_1},{poped_2},{poped_3} and {poped_4} can only have dinner whith me next time")
print(f"Fortunately,there are two people who can have dinner with me,and they are {guests[0]} and {guests[1]}")
del guests[0]
del guests[0]
print(guests)

输出为

I want LWM,BFD and LYM would like to have dinner whith me.
LWM can't come here!
I want NWY,BFD and LYM would like to have dinner whith me.
Then I find a bigger dining table.
I want WF,NWY ,ZZL,BFD,LYM and ZSH would like to have dinner whith me.
But now I can only invite two people because the new bigger table can't delivered in time.
I'm so sory that ZSH,LYM,BFD and ZZL can only have dinner whith me next time
Fortunately,there are two people who can have dinner with me,and they are WF and NWY
[]

3.3 组织列表

3.3.1 使用方法 sort() 对列表永久排序

方法 sort() 可以永久性地修改列表元素的排列顺序,使其按照字母顺序排列:

cars = ['bow', 'audi', 'toyota']
print(cars)

cars.sort()
print(cars)

输出为

['bow', 'audi', 'toyota']
['audi', 'bow', 'toyota']

还可以按照与字母顺序相反的顺序排列(只需向 sort() 方法传递参数 reverse=True 即可)

cars = ['bow', 'audi', 'toyota']
print(cars)

cars.sort(reverse=True)
print(cars)

输出为

['bow', 'audi', 'toyota']
['toyota', 'bow', 'audi']

3.3.2 使用函数 sorted() 对列表临时排序

cars = ['bow', 'audi', 'toyota', 'subaru']

print("Here is the original list:")
print(cars)

print("\nHere is the sorted list:")
print(sorted(cars))

print("\nHere is the original list again:")
print(cars)

输出为

Here is the original list:
['bow', 'audi', 'toyota', 'subaru']

Here is the sorted list:
['audi', 'bow', 'subaru', 'toyota']

Here is the original list again:
['bow', 'audi', 'toyota', 'subaru']

同样的,要想按照字母相反顺序只需向 sorted() 方法传递参数 reverse=True (print(sorted(travel_eagers, reverse=True)))即可。

3.3.3 倒着打印列表(反转列表元素顺序——使用方法 reverse() )

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

cars.reverse()
print(cars)

输出为

['bow', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bow']

虽说这是永久性地修改列表元素排列顺序,但要想恢复原来顺序也很简单,再 reserve 一次不就好了🤪🤪🤪

3.3.4 确定列表的长度

使用函数 len() 可以快速获悉列表的长度:

cars = ['bow', 'audi', 'toyota', 'subaru']
print(cars)
print(len(cars))

输出为

['bow', 'audi', 'toyota', 'subaru']
4

动手试一试

# 练习 3-8:放眼世界
travel_eagers = ['beijing', 'shanghai', 'yunann', 'neimenggu', 'guangzhou']
print(travel_eagers)
print('\n')

print(sorted(travel_eagers))
print(travel_eagers)
print('\n')

print(sorted(travel_eagers, reverse=True))
print(travel_eagers)
print('\n')

travel_eagers.reverse()
print(travel_eagers)
travel_eagers.reverse()
print(travel_eagers)
print('\n')

travel_eagers.sort()
print(travel_eagers)
travel_eagers.sort(reverse=True)
print(travel_eagers)
print('\n')

输出为

['beijing', 'shanghai', 'yunann', 'neimenggu', 'guangzhou']

['beijing', 'guangzhou', 'neimenggu', 'shanghai', 'yunann']
['beijing', 'shanghai', 'yunann', 'neimenggu', 'guangzhou']

['yunann', 'shanghai', 'neimenggu', 'guangzhou', 'beijing']
['beijing', 'shanghai', 'yunann', 'neimenggu', 'guangzhou']

['guangzhou', 'neimenggu', 'yunann', 'shanghai', 'beijing']
['beijing', 'shanghai', 'yunann', 'neimenggu', 'guangzhou']

['beijing', 'guangzhou', 'neimenggu', 'shanghai', 'yunann']
['yunann', 'shanghai', 'neimenggu', 'guangzhou', 'beijing']

# 练习 3-9 晚餐嘉宾
guests = ['LWM', 'BFD', 'LYM']
print(f"I invited {len(guests)} guests.")

输出为

I invited 3 guests.

3.4 使用列表时避免索引错误

刚开始使用列表时,经常会遇到一种错误。假设你有一个包含三个元素的列表,却要求获取第四个元素:

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

这将导致索引错误:

Traceback (most recent call last):
  File "motorcycle.py", line 10, in <module>
    print(motorcycles[3])
IndexError: list index out of range

索引是从 0 开始的!

另外,索引 -1 总是指向列表中最后一个元素,除非是空列表才会有报错。
注意:引发索引错误却找不到解决办法时,请尝试将列表或其长度打印出来,参照于此更容易找出其中的逻辑错误。


3.5 小结

在本章中,你学习了:

  1. 列表是什么以及如何使用其中的元素
  2. 如何定义列表已经如何增删元素
  3. 如何对列表进行永久性排序
  4. 如何展示列表而进行临时排序
  5. 如何确定列表的长度
  6. 在使用列表时如何避免索引错误

下一章将学习如何以更高效的方式处理列表元素呢🧐🧐🧐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值