零基础 学 python开发 (Genius套餐A) 二十二

夜光序言:

 

 

 

什么是人生?人生就是永不休止的奋斗~~

只有选定了目标并在奋斗中感到自己的努力没有虚掷,这样的生活才是充实的,精神也会永远年轻。

 

 

 

 

 

正文:

 

4.3 列表类型 
4.3.1 目标 


字符串或者数值列表是程序中常用的数据类型,例如使用一个字符串列表存储全国的省份名称,使用一个数值列表存储全班学生的成绩等。目标是掌握这种列表数据的使用。

 



4.3.2 列表类型 


列表是 Python 中最基本的数据结构,列表是最常用的 Python 数据类型,列表的数据项不需要具有相同的类型。列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是 0,第二个索引是 1,依此类推。序列都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。

1、创建一个列表 


只要把逗号分隔的不同的数据项使用方括号括起来即可,如下所示:
list1 = ['physics', 'chemistry','math', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ,4,2]
列表的的元素可以重复,例如 list2 中的 2,4 都重复出现,列表中的元素类型不一定要
完全一样,例如 list1 中有字符串也有数值。
列表类型是 Python 中的 list 类实例,例如:
list=['a','b','c','d']
print(list)
print(type(list))
结果:
['a', 'b', 'c', 'd']
<class 'list'>
其中 type(list)返回的类型是一个名称为 list 的类。

 

 



2、访问列表中的值 


使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,截取的方法与
字符串中截取的类似,如下所示:
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]
print ("list1[0]: ", list1[0])
print ("list2[1:5]: ", list2[1:5])
输出结果:
list1[0]: physics
list2[1:5]: [2, 3, 4, 5]

 

 

 



3、更新列表 


你可以对列表的数据项进行修改或更新,你也可以使用 append()方法来添加列表项,
如下所示:
list = ['physics', 'chemistry', 1997, 2000]
print ("Value available at index 2 : ")
print (list[2])
list[2] = 2001
print( "New value available at index 2 : ")
print ( list[2])
输出结果:
Value available at index 2 :
1997
New value available at index 2 :
2001

 

 



4、删除列表元素 


我们可以使用 del 语句来删除列表的的元素,如下实例:
list1 = ['physics', 'chemistry', 1997, 2000,2017]
print ( list1)
del list1[2]
print ("After deleting value at index 2 : ")
print (list1)
输出结果:
['physics', 'chemistry', 1997, 2000,2017]
After deleting value at index 2 :
['physics', 'chemistry', 2000,2017]

 

 



5、列表操作的联合 


我们可以使用"+"来连接多个列表,例如:
list1=["a","b"]
list2=["c",a"]
list3=list1+list2
print(list3)
结果:
[a","b","c","a"]
 

 

 



6、列表的截取 L[start:end:step] 

 


start.end,step 可选,冒号必须的, 基本含义是从 start 开始(包括 L[start]),以 step 为步长,获取到 end 的一段元素(注意不包括 L[end])。

如果 step=1,那么就是 L[start],L[start+1],......,L[end-2],L[end-1],如果 step>1,那么第一为 L[start],第二为 L[start+step],第三为 L[start+2*step],......, 以此类推,最后一个为 L[m],其中 m<end,但是 m+step>=end。即索引的变化是从 start 开始,按 step 跳跃变化,不断增大,但是不等于 end,也不超过 end。

如果 end 超过了最后一个元素的索引,那么最多取到最后一个元素。
start 不指定默认 0,end 不指定默认序列尾,step 不指定默认 1.
step 为正数则索引是增加的,索引沿正方向变化;如何 step<0,那么索引是减少的,按负方向变化。

 

我们不能使用 step=0,不然索引就原地踏步不变了。
如果 start,end 为负数,表示倒数的索引,例如 start=-1,则表示 len(L)-1, start=-2,表示 len(L)-2。

 


例 4-4-1:列表的截取 


L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
L[0:2] #[1, 2], 取区间[i,j) ,左闭右开
L[:2] #同上,可省略第一位
L:[2:] #[3, 4, 5, 6, 7, 8, 9, 10, 11]
L[2:-1] #[3, 4, 5, 6, 7, 8, 9, 10]
L[:] #同 l1,相当于复制一份
L[::2] #步长 2,[1, 3, 5, 7, 9, 11]
L[0:7:2] #[1, 3, 5, 7]
L[7:0:-2] #[8, 6, 4, 2] 注意步长为负、理解起来相当于从 7 到 1,倒序步长 2
L[8:14] #[9,10,11] 注意 end 超过最后的索引


 


例 4-4-2:列表的截取 


L = ["a0","a1","a2","a3","a4","a5","a6","a7","a8","a9"]
print("L---",L)
print("L[0:-2]---",L[0:-2])
print("L[:-2]---",L[:-2])
print("L[-2:]---",L[-2:])
print("L[-2,6]---",L[-2:6])
print("L[:]---",L[:])
print("L[::,-2]---",L[::-2])
print("L[7,-1:-1]---",L[7:-1:-1])
print("L[8:0.-1])---",L[8:0:-1])
print("L[5:1:-2]---",L[5:1:-2])
print("L[4:1.-2]---",L[4:1:-2])
结果:
L--- ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9']
L[0:-2]--- ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7']
L[:-2]--- ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7']
L[-2:]--- ['a8', 'a9']
L[-2,6]--- []
L[:]--- ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9']
L[::,-2]--- ['a9', 'a7', 'a5', 'a3', 'a1']
L[7,-1:-1]--- []
L[8:0.-1])--- ['a8', 'a7', 'a6', 'a5', 'a4', 'a3', 'a2', 'a1']
L[5:1:-2]--- ['a5', 'a3']
L[4:1.-2]--- ['a4', 'a2']

 



7、判断一个元素是否在列表中 


我们使用 in 或者 not in 操作判断一个元素是否在或者不在列表中,例如:
list=['a','b','c','d']
print('a' in list)
print('A' in list)
print('A' not in list)
结果:
True
False
True
其中 'a'在列表中,但是'A'不在列表中。

 



 
4.3.3 列表常用操作函数 
1、list.append(obj):在列表末尾添加新的对象 

 

 


以下实例展示了 append()函数的使用方法:
aList = [123, 'xyz', 'zara', 'abc']
aList.append( 2009 )
print ("Updated List : ", aList)
以上实例输出结果如下:
Updated List : [123, 'xyz', 'zara', 'abc', 2009]

 

 



2、list.count(obj):统计某个元素在列表中出现的次数 


以下实例展示了 count()函数的使用方法:
aList = [123, 'xyz', 'zara', 'abc', 123]
print ("Count for 123 : ", aList.count(123))
print ("Count for zara : ", aList.count('zara'))
print ("Count for abc : ", aList.count('abc'))
以上实例输出结果如下:
Count for 123 : 2
Count for zara : 1
Count for abc: 0

 

 



3、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) 


以下实例展示了 extend()函数的使用方法:
aList = [123, 'xyz', 'zara', 'abc', 123]
bList = [2009, 'manni']
aList.extend(bList)
print ("Extended List : ", aList )
以上实例输出结果如下:
Extended List : [123, 'xyz', 'zara', 'abc', 123, 2009, 'manni']

 

 

 



4、list.index(obj):从列表中找出某个值第一个匹配项的索引位置 


以下实例展示了 index()函数的使用方法:
aList = [123, 'xyz', 'zara', 'abc']
print ("Index for xyz : ", aList.index( 'xyz' ) )
print ("Index for zara : ", aList.index( 'zara' ) )
以上实例输出结果如下:
Index for xyz : 1
Index for zara : 2
注意如果元素不在列表中,那么会错误:
print ("Index for abc: ", aList.index( 'abc' ) ) #错误!

 



5、list.insert(index, obj):将对象插入列表 


以下实例展示了 insert()函数的使用方法:
aList = [123, 'xyz', 'zara', 'abc']
aList.insert( 3, 2009)
print ("Final List : ", aList)
以上实例输出结果如下:
Final List : [123, 'xyz', 'zara', 2009, 'abc']

 



6、list.remove(obj):移除列表中某个值的第一个匹配项 


aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.remove('xyz')
print ("List : ", aList)
aList.remove('abc')
print ("List : ", aList)
以上实例输出结果如下:
List : [123, 'zara', 'abc', 'xyz']
List : [123, 'zara', 'xyz']
注意如果要删除的元素不在列表中就出错误:
aList.remove('abcd') #错误!

 

 



7、删除元素 del list[index] 


如果要删除某个指定索引 index 的元素,那么可以采用:
 del list[index]
例如:
aList = [123, 'xyz', 'zara', 'abc']
del aList[2]
print(aList)
结果:
[123, 'xyz', 'abc']

 



 
8、弹出元素 list.pop(index=-1) 


弹出元素与删除元素一样,都是从列表中移除一个元素项。如果要弹出某个指定索引
index 的元素,那么可以采用:
 list.pop(index)
index 的默认值是-1,即使用 list.pop()即弹出最后一个元素。
例如:
list=['a','b','c','d']
list.pop()
print(list)
list.pop(0)
print(list)
结果:
['a', 'b', 'c']
['b', 'c'] 

 



9、list.reverse():反向列表中元素 


注意反向后原来的列表的元素顺序改变了,以下实例展示了 reverse()函数的使用方法:
aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.reverse()
print ("List : ", aList)
以上实例输出结果如下:
List : ['xyz', 'abc', 'zara', 'xyz', 123]

 

 



10、list.sort():对原列表进行排序 


注意排序后原来的列表的元素顺序改变了,以下实例展示了 sort()函数的使用方法:
aList = ['123', 'xyz', 'zara', 'abc', 'xyz']
aList.sort()
print ("List : ", aList)
以上实例输出结果如下:
List : ['123', 'abc', 'xyz', 'xyz', 'zara']
注意: 要对列表的元素进行排序,这些元素必须是同类型的,例如全部为字符串,或
者全部为数值,保证它们两两能进行大小比较。如果类型时混合的,则不能进行排序,例如:
aList = [1,6,3,2,"a"]
aList.sort()
print ("List : ", aList)
结果错误:
TypeError: unorderable types: str() < int()

 

 



4.3.4 列表与函数 


列表作为函数参数,如果在函数中改变了列表,那么调用处的列表也同时被改变!也就是说调用处的实际参数与函数的形式参数时同一个变量, 这一点与普通的整数、浮点数、字符串变量不同。

 

 


例 4-3-3: 列表作为函数参数 


def fun( mylist,m,s):
 "修改传入的列表"
 mylist.append(1);
 m=1
 s="changed"
 print ("函数内取值: ", mylist,m,s)
# 调用 fun 函数
mylist = [10,20,30];
m=0
s="try"
fun( mylist,m,s );
print ("函数外取值: ", mylist,m,s)
结果:
函数内取值: [10, 20, 30, 1] 1 changed
函数外取值: [10, 20, 30, 1] 0 try
可以看到 mylist 发生了改变,但是整数 m 与字符串 s 没有变化。

 



例 4-4-4: 函数返回列表 

 


def fun():
 list=[]
 for i in range(10):
 list.append(i)
 return list
# 调用 fun 函数
list=fun()
print(list)
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
列表是一个变量对象,函数可以返回一个列表。

 

 


 


4.3.4 【案例】列表存储省份与城市 
1、案例描述 


使用列表 provinces 存储部分省份名称,再使用另外一个列表 cities 存储对应的省份的城市,实现省份与城市的查找。


2、案例分析 


provinces 与 cities 设计如下:
provinces=["广东","四川","贵州"]
cities=[["广州","深圳","惠州","珠海"],["成都","内江","乐山"],["贵阳","六盘水","遵义"]]


这样一个序号 index 下 provinces[index]为省份,而 cities[index]是这个省份的城市,也是一个列表。

 

 



3、案例代码 
(1) 输入省份查找城市 


provinces=["广东","四川","贵州"]
cities=[["广州","深圳","惠州","珠海"],["成都","内江","乐山"],["贵阳","六盘水
","遵义"]]
p=input("输入省份:")
found=False
for i in range(len(provinces)):
 if provinces[i]==p:
 print(provinces[i],end=":")
 for j in range(len(cities[i])):
 print(cities[i][j],end=" ")
 found=True
 break
if not found:
 print("没有这个省份")
程序中 cities 是一个二维的列表,即 cities 是一个列表,它的每个元素也是一个列表。

 



 (2) 输入城市查找省份 


provinces=["广东","四川","贵州"]
cities=[["广州","深圳","惠州","珠海"],["成都","内江","乐山"],["贵阳","六盘水","遵义"]]
def search(c):
 for i in range(len(cities)):
 for x in cities[i]:
 if x==c:
 print(c,"在",provinces[i]+"省")
 return
 print("没有查到")
c = input("输入城市:")
search(c)
夜光:程序中设计 search(c)函数查找 c 城市的省份,第一个 i 循环遍历所有 cities 中的元素,
第二个循环中 cities[i]又是一个列表,在此循环中查找城市,如果查找成功那么 provinces[i]
就是该城市所在的省份。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值