Python编程学习笔记(3)

嵌入式技术

1361人已加入

描述

3.1 列表是什么

列表由一系列按特定顺序排列的元素组成。

可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。

鉴于列表通常包含多个元素,可以给列表指定一个表示复数的名称(如letters 、digits 或names )。

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

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)
['trek', 'cannondale', 'redline', 'specialized']

3.1.1 访问列表元素

列表是 有序集合 ,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。

注意:这里的索引从0开始

还可以对任何列表元素调用之前介绍的字符串方法。

print(bicycles[0])
trek
print(bicycles[1].title())
Cannondale

3.1.2 索引从0而不是1开始

Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1。可以在不知道列表长度的情况下访问最后的元素。

print(bicycles[-1])
specialized

3.1.3 使用列表中的各个值

可像使用其他变量一样使用列表中的各个值。

练习:

3-1 姓名:将一些朋友的姓名存储在一个列表中,并将其命名为names 。依次访问该列表中的每个元素,从而将每个朋友的姓名都打印出来。

3-2 问候语:继续使用练习3-1中的列表,但不打印每个朋友的姓名,而为每人打印一条消息。每条消息都包含相同的问候语,但抬头为相应朋友的姓名。

3-3 自己的列表:想想你喜欢的通勤方式,如骑摩托车或开汽车,并创建一个包含多种通勤方式的列表。根据该列表打印一系列有关这些通勤方式的宣言,如“I would like to own a Honda motorcycle”。

# 3-1 这里用到了循环,后面再讲
names = ['Su Hai', 'Yang Ling', 'Mike', 'Helen']
for i in range(len(names)):
    print(names[i])
# 3-2
for i in range(len(names)):
    print('{}, Nice to meet you.'.format(names[i]))
# 3-3
traffic_type = ['ship', 'train', 'bicycle', 'aeroplane']
for i in range(len(traffic_type)):
    print('I would like to get to your home by {}.'.format(traffic_type[i]))
Su Hai
Yang Ling
Mike
Helen
Su Hai, Nice to meet you.
Yang Ling, Nice to meet you.
Mike, Nice to meet you.
Helen, Nice to meet you.
I would like to get to your home by ship.
I would like to get to your home by train.
I would like to get to your home by bicycle.
I would like to get to your home by aeroplane.

3.2 修改、添加和删除元素

3.2.1 修改列表元素

修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。

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

motorcycles[0] = 'ducati'
print(motorcycles)

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

3.2.2 在列表中添加元素

  1. 在列表末尾添加元素

append()方法将元素'ducati'添加到了列表末尾,而不影响列表中的其他所有元素。

motorcycles.append('universe')
print(motorcycles)
['ducati', 'dayang', 'suzuki', 'universe']

可以先创建一个空列表,再使用一系列的append() 语句添加元素。

motorcycles = []

motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')

print(motorcycles)
['honda', 'yamaha', 'suzuki']
  1. 在列表中插入元素

使用方法insert()可在列表的任何位置添加新元素。为此,需要指定新元素的索引和值。这种操作将列表中既有的每个元素都右移一个位置。

motorcycles = ['honda', 'yamaha', 'suzuki']

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

3.2.3 从列表中删除元素

  1. 使用del 语句删除元素

如果知道要删除的元素在列表中的位置,可使用del 语句。使用del可删除任何位置处的列表元素,条件是知道其索引。

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']
  1. 使用方法pop() 删除元素

方法pop()可删除列表末尾的元素,并让你能够接着使用它。列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。

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

popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
  1. 弹出列表中任何位置处的元素

可以使用pop()来删除列表中任何位置的元素,只需在括号中指定要删除的元素的索引即可。

如果不确定该使用del语句还是pop()方法,下面是一个简单的判断标准:如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。

motorcycles = ['honda', 'yamaha', 'suzuki']

first_owned = motorcycles.pop(0)
print(motorcycles)
print(first_owned)
['yamaha', 'suzuki']
honda
  1. 根据值删除元素

当不知道要从列表中删除的值所处的位置。如果你只知道要删除的元素的值,可使用方法remove() 。

方法remove()只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。

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

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

练习:

3-4 嘉宾名单 :如果你可以邀请任何人一起共进晚餐(无论是在世的还是故去的),你会邀请哪些人?请创建一个列表,其中包含至少3个你想邀请的人;然后,使用这个列表打印消息,邀请这些人来与你共进晚餐。

3-5 修改嘉宾名单 :你刚得知有位嘉宾无法赴约,因此需要另外邀请一位嘉宾。

以完成练习3-4时编写的程序为基础,在程序末尾添加一条print 语句,指出哪位嘉宾无法赴约。

修改嘉宾名单,将无法赴约的嘉宾的姓名替换为新邀请的嘉宾的姓名。

再次打印一系列消息,向名单中的每位嘉宾发出邀请。

3-6 添加嘉宾 :你刚找到了一个更大的餐桌,可容纳更多的嘉宾。请想想你还想邀请哪三位嘉宾。

以完成练习3-4或练习3-5时编写的程序为基础,在程序末尾添加一条print 语句,指出你找到了一个更大的餐桌。

使用insert() 将一位新嘉宾添加到名单开头。

使用insert() 将另一位新嘉宾添加到名单中间。

使用append() 将最后一位新嘉宾添加到名单末尾。

打印一系列消息,向名单中的每位嘉宾发出邀请。

3-7 缩减名单 :你刚得知新购买的餐桌无法及时送达,因此只能邀请两位嘉宾。

以完成练习3-6时编写的程序为基础,在程序末尾添加一行代码,打印一条你只能邀请两位嘉宾共进晚餐的消息。

使用pop() 不断地删除名单中的嘉宾,直到只有两位嘉宾为止。每次从名单中弹出一位嘉宾时,都打印一条消息,让该嘉宾知悉你很抱歉,无法邀请他来共进晚餐。

对于余下的两位嘉宾中的每一位,都打印一条消息,指出他依然在受邀人之列。

使用del 将最后两位嘉宾从名单中删除,让名单变成空的。打印该名单,核实程序结束时名单确实是空的。

# 3-4
print('-------------------')
guests = ['Guest1','Guest2','Guest3','Guest4']
for i in range(len(guests)):
    print('Invation to {}'.format(guests[i]))
# 3-5
print('-------------------')
unattended_guest = guests.pop(2)
print(unattended_guest)
guests.append('Guest5')
for i in range(len(guests)):
    print('Invation to {}'.format(guests[i]))
# 3-6
print('-------------------')
guests.insert(0,'Guest6')
guests.insert(int(len(guests)/2),'Guest7')
guests.append('Guest8')
for i in range(len(guests)):
    print('Invation to {}'.format(guests[i]))
# 3-8
print('-------------------')
for i in range(len(guests)-2):
    print('Sorry to {}'.format(guests.pop()))

for i in range(len(guests)):
    print('Invation to {}'.format(guests[0]))
    del guests[0]

print(len(guests))
-------------------
Invation to Guest1
Invation to Guest2
Invation to Guest3
Invation to Guest4
-------------------
Guest3
Invation to Guest1
Invation to Guest2
Invation to Guest4
Invation to Guest5
-------------------
Invation to Guest6
Invation to Guest1
Invation to Guest7
Invation to Guest2
Invation to Guest4
Invation to Guest5
Invation to Guest8
-------------------
Sorry to Guest8
Sorry to Guest5
Sorry to Guest4
Sorry to Guest2
Sorry to Guest7
Invation to Guest6
Invation to Guest1
0

3.3 组织列表

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

方法sort() 永久性修改了列表元素的排列顺序,再也无法恢复到原来的排列顺序。还可以按与字母顺序相反的顺序排列列表元素,为此,只需向sort() 方法传递参数reverse=True 。

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

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

要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted()。函数sorted()让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。

在并非所有的值都是小写时,按字母顺序排列列表要复杂些。决定排列顺序时,有多种解读大写字母的方式,要指定准确的排列顺序,可能要复杂一些。

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

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

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

print("nHere is the reverse sorted list:")
print(sorted(cars,reverse=True))

print("nHere is the original list again:")
print(cars)
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']

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

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

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

3.3.3 倒着打印列表

要反转列表元素的排列顺序,可使用方法reverse()。方法reverse() 永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse() 即可。

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

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

3.3.4 确定列表的长度

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

print(len(cars))
4

练习: 3-8 放眼世界 :想出至少5个你渴望去旅游的地方。

将这些地方存储在一个列表中,并确保其中的元素不是按字母顺序排列的。

按原始排列顺序打印该列表。不要考虑输出是否整洁的问题,只管打印原始Python列表。

使用sorted() 按字母顺序打印这个列表,同时不要修改它。

再次打印该列表,核实排列顺序未变。

使用sorted() 按与字母顺序相反的顺序打印这个列表,同时不要修改它。

再次打印该列表,核实排列顺序未变。

使用reverse() 修改列表元素的排列顺序。打印该列表,核实排列顺序确实变了。

使用reverse() 再次修改列表元素的排列顺序。打印该列表,核实已恢复到原来的排列顺序。

使用sort() 修改该列表,使其元素按字母顺序排列。打印该列表,核实排列顺序确实变了。

使用sort() 修改该列表,使其元素按与字母顺序相反的顺序排列。打印该列表,核实排列顺序确实变了。

3-9 晚餐嘉宾 :在完成练习3-4~练习3-7时编写的程序之一中,使用len() 打印一条消息,指出你邀请了多少位嘉宾来与你共进晚餐。

3-10 尝试使用各个函数 :想想可存储到列表中的东西,如山岳、河流、国家、城市、语言或你喜欢的任何东西。编写一个程序,在其中创建一个包含这些元素的列表,然后,对于本章介绍的每个函数,都至少使用一次来处理这个列表。

# 3-8
places = ['nantong','beijing','shanghai','nanjing','hangzhou']
print(places)
print(sorted(places))
print(places)
print(sorted(places,reverse=True))
print(places)
places.reverse()
print(places)
places.reverse()
print(places)
places.sort()
print(places)
places.sort(reverse=True)
print(places)
# 3-9
print(len(places))
['nantong', 'beijing', 'shanghai', 'nanjing', 'hangzhou']
['beijing', 'hangzhou', 'nanjing', 'nantong', 'shanghai']
['nantong', 'beijing', 'shanghai', 'nanjing', 'hangzhou']
['shanghai', 'nantong', 'nanjing', 'hangzhou', 'beijing']
['nantong', 'beijing', 'shanghai', 'nanjing', 'hangzhou']
['hangzhou', 'nanjing', 'shanghai', 'beijing', 'nantong']
['nantong', 'beijing', 'shanghai', 'nanjing', 'hangzhou']
['beijing', 'hangzhou', 'nanjing', 'nantong', 'shanghai']
['shanghai', 'nantong', 'nanjing', 'hangzhou', 'beijing']
5

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

仅当列表为空时,这种访问最后一个元素的方式才会导致错误。

发生索引错误却找不到解决办法时,可尝试将列表或其长度打印出来。列表可能与你以为的截然不同,在程序对其进行了动态处理时尤其如此。通过查看列表或其包含的元素数,可帮助你找出这种逻辑错误。

%debug
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[-1])
print(motorcycles[3])
> < ipython-input-21-8306d8c0082f >(4)< module >()
    1 get_ipython().magic('debug')
    2 motorcycles = ['honda', 'yamaha', 'suzuki']
    3 print(motorcycles[-1])
---- > 4 print(motorcycles[3])

ipdb > len(motorcycles)
3
ipdb > quit
suzuki
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
< ipython-input-22-8306d8c0082f > in < module >()
    2 motorcycles = ['honda', 'yamaha', 'suzuki']
    3 print(motorcycles[-1])
---- > 4 print(motorcycles[3])

IndexError: list index out of range



---------------------------------------------------------------------------

IndexError                                Traceback (most recent call last)

< ipython-input-22-8306d8c0082f > in < module >()
      2 motorcycles = ['honda', 'yamaha', 'suzuki']
      3 print(motorcycles[-1])
---- > 4 print(motorcycles[3])


IndexError: list index out of range
motorcycles = []
print(motorcycles[-1])
---------------------------------------------------------------------------

IndexError                                Traceback (most recent call last)

< ipython-input-23-08e14d7d6f1a > in < module >()
      1 motorcycles = []
---- > 2 print(motorcycles[-1])


IndexError: list index out of range
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分