第三章 列表
3.1列表是什么
列表由一系列按特定顺序排列的元素组成。数字,字母,字符串等任意元素
python用 [ ]
表示列表
bicycles = ['treck','cannondale','redine','specialized']
print(bicycles)
['treck', 'cannondale', 'redine', 'specialized']
3.1.1访问列表元素
可以看作数组,想要输出某个元素,只需输入索引(数组下标)即可,规则一样下标从零开始
bicycles = ['treck','cannondale','redine','specialized']
print(bicycles[1])
cannondale
print(bicycles[1].title())
Cannondale
3.1.2索引从0而不是1开始
第一个列表元素的索引为0而不是1,大多数编程如此
与列表操作的底层实现有关
bicycles = ['treck','cannondale','redine','specialized']
print(bicycles[3]) #返回第四个元素
specialized
python为访问最后一个元素提供了特殊语法。通过索引-1,-2是倒数第二个元素,-3是倒数第三个
print(bicycles[-1]) #可以使你不知道列表长度情况下输出最后一个元素
print(bicycles[-3])
specialized
cannondale
3.1.3使用列表中的各个值
用f"{}"
message = f"My favorite bicycles was a {bicycles[0].title()}"
print(message)
My favorite bicycles was a Treck
3.1.4练习
3-1姓名
name = ['刻晴','甘雨','温迪','公子']
print(name[0])
print(name[1])
print(name[-1])
print(name[-2])
刻晴
甘雨
公子
温迪
3-2问候语
message = f"{name[0]}:刮痧的神"
print(message)
message = f"{name[1]}:刮痧的神"
print(message)
message = f"{name[-2]}:刮痧的神"
print(message)
message = f"{name[-1]}:刮痧的神"
print(message)
刻晴:刮痧的神
甘雨:刮痧的神
温迪:刮痧的神
公子:刮痧的神
3-3自己的列表
Travel_mode = ['car','bicycle','train']
message1 = f"I would like to own a Electric {Travel_mode[0]}"
print(message1)
message2 = f"I would like to own a new {Travel_mode[1]}"
print(message2)
message3 = f"I would like to take {Travel_mode[2]}"
print(message3)
I would like to own a Electric car
I would like to own a new bicycle
I would like to take train
3.2修改、添加和删除元素
3.2.1修改
直接用索引把指定元素重新赋值
name = ['刻晴','甘雨','温迪','公子']
print(name)
name[2] = '凝光'
print(name)
['刻晴', '甘雨', '温迪', '公子']
['刻晴', '甘雨', '凝光', '公子']
3.2.2在列表中添加元素
1.在列表末尾添加元素
用.append()
附加,好处是不影响其他元素,可以用来创建
name = ['刻晴','甘雨','温迪','公子']
name.append("万叶")
print(name)
['刻晴', '甘雨', '温迪', '公子', '万叶']
name = []
name.append('张三')
name.append('李四')
name.append('王二麻子')
print(name)
['张三', '李四', '王二麻子']
2.在列表中插入元素
用insert(位置,值)
需要指定索引和值
name = ['刻晴','甘雨','温迪','公子']
name.insert(2,'凝光')
print(name)
['刻晴', '甘雨', '凝光', '温迪', '公子']
3.2.3从列表中删除元素|
1.使用del
语句中删除元素,必须得知道位置
用法:del 列表名[x]
删除是永久删除,无法访问
name = ['刻晴','甘雨','温迪','公子']
del name[3]
print(name)
['刻晴', '甘雨', '温迪']
2.使用方法。pop()
删除末尾元素
术语 弹出(pop)源自类比:将列表看作一个栈,而删除列表末尾的元素相当于弹出栈顶元素
name = ['刻晴','甘雨','温迪','公子']
print(name)
popped_name = name.pop()
print(name)
print(popped_name)
['刻晴', '甘雨', '温迪', '公子']
['刻晴', '甘雨', '温迪']
公子
用处:比如列表是按时间顺序排序的,可以打印出最近一条消息
name = ['刻晴','甘雨','温迪','公子']
popped_name = name.pop()
print(f"The first 角色 is {popped_name}")
The first 角色 is 公子
3.弹出列表中任何位置处的元素
只需在pop()中指直接输入索引,就可以指定弹出
name = ['刻晴','甘雨','温迪','公子']
popped_name = name.pop(2)
print(popped_name)
温迪
使用标准:如果你想删除一个元素,并且不再以任何方式访问它,用del;如果还想用,则用pop()
4.根据值删除元素
用.remove()
直接输入值,删除的元素还可以使用
name = ['刻晴','甘雨','温迪','公子']
name.remove("公子")
print(name)
['刻晴', '甘雨', '温迪']
name = ['刻晴','甘雨','温迪','公子','护摩']
print(name)
no_have = '护摩'
name.remove(no_have)
print(name)
print(f"I don't have {no_have}")
['刻晴', '甘雨', '温迪', '公子', '护摩']
['刻晴', '甘雨', '温迪', '公子']
I don't have 护摩
注意:remove()只能删除一个元素,若有多个相同的,则需要循环删除
3.2.4练习
3-4嘉宾名单
name = ['python','Java','C++']
print(f"嘉宾名单:{name}")
嘉宾名单:['python', 'Java', 'C++']
print(f"无法赴约嘉宾:{name[1]}")
无法赴约嘉宾:Java
name[1] = "张三"
print(name)
print(f"请{name[0]}于2021年4月21日12点15分参加")
print(f"请{name[1]}于2021年4月21日12点15分参加")
print(f"请{name[2]}于2021年4月21日12点15分参加")
['python', '张三', 'C++']
请python于2021年4月21日12点15分参加
请张三于2021年4月21日12点15分参加
请C++于2021年4月21日12点15分参加
3-6 添加嘉宾
print("我们找到了一个更大的餐桌")
name.insert(0,"爱因斯坦")
name.insert(2,"傅里叶")
name.append("李白")
print(name)
print(f"请{name[0]}于2021年4月21日12点15分参加")
print(f"请{name[1]}于2021年4月21日12点15分参加")
print(f"请{name[2]}于2021年4月21日12点15分参加")
print(f"请{name[3]}于2021年4月21日12点15分参加")
print(f"请{name[4]}于2021年4月21日12点15分参加")
print(f"请{name[5]}于2021年4月21日12点15分参加")
我们找到了一个更大的餐桌
['爱因斯坦', 'python', '傅里叶', '张三', 'C++', '李白']
请爱因斯坦于2021年4月21日12点15分参加
请python于2021年4月21日12点15分参加
请傅里叶于2021年4月21日12点15分参加
请张三于2021年4月21日12点15分参加
请C++于2021年4月21日12点15分参加
请李白于2021年4月21日12点15分参加
print("我们又谈崩了,只能邀请两个人")
name = ['爱因斯坦', 'python', '傅里叶', '张三', 'C++', '李白']
print(name)
popped_name1 = name.pop(0)
print(f"尊敬的{popped_name1}我很抱歉,没有经费,无法邀请您到共进晚餐")
popped_name2 = name.pop(1)
print(f"尊敬的{popped_name2}我很抱歉,没有经费,无法邀请您到共进晚餐")
popped_name3 = name.pop(1)
print(f"尊敬的{popped_name3}我很抱歉,没有经费,无法邀请您到共进晚餐")
popped_name4 = name.pop(2)
print(f"尊敬的{popped_name4}我很抱歉,没有经费,无法邀请您到共进晚餐")
print(f"尊敬的{name[0]},您依然可以参加我们的晚会")
print(f"尊敬的{name[1]},您依然可以参加我们的晚会")
del name[0]
del name[0]
print(name)
我们又谈崩了,只能邀请两个人
['爱因斯坦', 'python', '傅里叶', '张三', 'C++', '李白']
尊敬的爱因斯坦我很抱歉,没有经费,无法邀请您到共进晚餐
尊敬的傅里叶我很抱歉,没有经费,无法邀请您到共进晚餐
尊敬的张三我很抱歉,没有经费,无法邀请您到共进晚餐
尊敬的李白我很抱歉,没有经费,无法邀请您到共进晚餐
尊敬的python,您依然可以参加我们的晚会
尊敬的C++,您依然可以参加我们的晚会
[]
3.3组织列表
有时候需要初始元素顺序,有时候又要调整列表顺序
3.3.1使用方法sort()
对列表永久排序
sort()
无返回值,a.sort()
已经将a列表结构改变,用b=a.sort()
是错误的
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()
对列表临时排序
cars = ['bmw','audi','toyota','subaru']
print("Here is the original list:")
print(cars)
print("Here is the sorted list:")
print(sorted(cars))
print("Here is the original again:")
print(cars)
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']
Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']
Here is the original again:
['bmw', 'audi', 'toyota', 'subaru']
3.3.3倒着打印列表
用方法reverse()
可永久性修改元素的排列顺序,但可随时恢复,再调用一次reverse即可
cars = ['bmw','audi','toyota','subaru']
cars.reverse()
print(cars)
['subaru', 'toyota', 'audi', 'bmw']
3.3.4确定列表长度
直接用函数len()
len(cars)
4
3.3.4练习
3-8放眼世界
want_go = ['shenzhen','shanghai','England','hanghzou','guigu']
print(want_go)
print(sorted(want_go))
print(want_go)
want_go.reverse()
print(want_go)
want_go.reverse()
print(want_go)
want_go.sort()
print(want_go)
want_go.sort(reverse = True)
print(want_go)
['shenzhen', 'shanghai', 'England', 'hanghzou', 'guigu']
['England', 'guigu', 'hanghzou', 'shanghai', 'shenzhen']
['shenzhen', 'shanghai', 'England', 'hanghzou', 'guigu']
['guigu', 'hanghzou', 'England', 'shanghai', 'shenzhen']
['shenzhen', 'shanghai', 'England', 'hanghzou', 'guigu']
['England', 'guigu', 'hanghzou', 'shanghai', 'shenzhen']
['shenzhen', 'shanghai', 'hanghzou', 'guigu', 'England']
3-9晚餐嘉宾
name = ['爱因斯坦', 'python', '傅里叶', '张三', 'C++', '李白']
a = len(name)
message = f"共邀请了{a}个嘉宾"
print(message)
共邀请了6个嘉宾
3-10前面所有函数再用一遍
country = ['China','America','England','Japan']
print(country)
# 修改
country[3] = 'Italy'
print(country)
# 添加
country.append("Frank") # 末尾加
print(country)
country.insert(2,'Janpan') # 任意位置加
print(country)
#删除
del country[1] # 无法再访问
print(country)
popped_c1 = country.pop() # 弹出末尾
print(country)
print(popped_c1)
popped_c2 = country.pop(3) #弹出指定
print(country)
print(popped_c2)
c3 = 'Janpan'
country.remove(c3) # 按值删
print(country)
print(c3)
print('------排序------')
country2 = ['China', 'America', 'Janpan', 'England', 'Italy', 'Frank']
print("------临时排序-----")
print(sorted(country2))
print(country2)
print("------永久排序-----")
country2.sort()
print(country2)
print("------永久倒着排序-----")
country2.sort(reverse = True)
print(country2)
print("------永久倒着打印-----")
country2.reverse()
print(country2)
a = len(country)
b = len(country2)
print(f"第一个国家列表长度为:{a},\n第二个国家列表长度为:{b}")
['China', 'America', 'England', 'Japan']
['China', 'America', 'England', 'Italy']
['China', 'America', 'England', 'Italy', 'Frank']
['China', 'America', 'Janpan', 'England', 'Italy', 'Frank']
['China', 'Janpan', 'England', 'Italy', 'Frank']
['China', 'Janpan', 'England', 'Italy']
Frank
['China', 'Janpan', 'England']
Italy
['China', 'England']
Janpan
------排序------
------临时排序-----
['America', 'China', 'England', 'Frank', 'Italy', 'Janpan']
['China', 'America', 'Janpan', 'England', 'Italy', 'Frank']
------永久排序-----
['America', 'China', 'England', 'Frank', 'Italy', 'Janpan']
------永久倒着排序-----
['Janpan', 'Italy', 'Frank', 'England', 'China', 'America']
------永久倒着打印-----
['America', 'China', 'England', 'Frank', 'Italy', 'Janpan']
第一个国家列表长度为:2,
第二个国家列表长度为:6
3.4避免错误
country = ['China','America','England','Japan']
print(country[5])
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-125-ac0ba5b37012> in <module>
1 country = ['China','America','England','Japan']
----> 2 print(country[5])
IndexError: list index out of range
常见错误:超出范围,即索引错误——输出len()再看该输出那个索引