python学习5

数据结构:


另外还有一个集合,也是Python里数据结构的一种

列表:

列表是python中常用并很重要的一个功能之一,用方括号[ ]来表示,并用逗号分隔其中的元素,元素可以是任何数据类型,并且 是有序的。

列表也是可以赋值给变量的,并可以用变量加索引来表示其中的元素,这个跟字符串有些类似,不过字符串是不可变的,而列表是可变的,注意,索引是从0开始

另外,如果你不知道列表的长度但需要输出最后一个元素,可以将索引指定为-1,例如list1[-1]就是最后一个元素了,以此类推,list1[-2]就是倒数第二个

跟字符串一样,列表也有自己的方法

list1=[1,2,3,'a','b','d',[8,9]]                       #定义一个列表,元素也可以是一个列表
print(list1)                                          #打印
list1.append(20)                                      #末尾添加一个元素    
print(list1)
print(list1.pop())                                    #末尾删除一个元素,并返回这个元素的值,下面输出为20
print(list1)
del list1[0]                                          #删除第一个元素,del可以删除任意一个元素,也可以删除任意一片元素
print(list1)
list1.remove('b')                                     #移出元素‘b’
print(list1)
list1.insert(0,1)                                     #在第一个位置插入数字1,其余元素后移                           
print(list1)

输出:
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 
================== RESTART: C:\Users\Deast\Desktop\test.py ==================
[1, 2, 3, 'a', 'b', 'd', [8, 9]]
[1, 2, 3, 'a', 'b', 'd', [8, 9], 20]
20
[1, 2, 3, 'a', 'b', 'd', [8, 9]]
[2, 3, 'a', 'b', 'd', [8, 9]]
[2, 3, 'a', 'd', [8, 9]]
[1, 2, 3, 'a', 'd', [8, 9]]
>>> 

其他一些列表方法

Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> list1=[2,4,13,21,9,15,26]
>>> list2=list1[:]
>>> list1.sort()                              #排序,从小到大,数字和字符串是不能用这个方法排序的,会出错          
>>> list1
[2, 4, 9, 13, 15, 21, 26]
>>> sorted(list2)                             #这不是方法,是函数,对列表临时排序,对原列表是没有影响的    
[2, 4, 9, 13, 15, 21, 26]
>>> list2.reverse()                           #将列表元素倒序
>>> list2
[26, 15, 9, 21, 13, 4, 2]
>>> len(list1)                                #输出列表长度,函数非方法
7
>>> 

上面有个语句是list2=list1[:],为什么不是list2=list1。在Python里,列表的复制不是直接等于就可以了,像list2=list1这个语句,只是给List列表多起了个名字


如上图,当list1变化后,list2也跟着变化了。所以如果你想复制列表的吧,最好用list2=list1[:]这种表达方式,或者用list函数,list2=list(list1),其他方法也有,但这两种比较方便

其他数据结构这里没讲到,先简单学习学习

元组

元组和列表有些类似,可以用索引表示元素,不同的是元组是用小括号表示的,且元素不能修改。

字典

字典也是用的比较多的,它是用大括号表示的,里面的元素分为key:value(键值),键一定是唯一的,值可以不唯一,比如

>>> dict={'one':1,'two':2,'three':2}
>>> dict
{'one': 1, 'two': 2, 'three': 2}
>>> 

键值可以是数字、字符串、列表、元组,但列表是可变的,而键的值应该不可变,所以尽量不要让列表作为键

集合

Python的集合(set)和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素,集合也是用大括号表示的

小练习

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

name_list=['Joker','Tom','Ming']
print(name_list[0]+":Welcome to dinner")
print(name_list[1]+":Welcome to dinner")
print(name_list[2]+":Welcome to dinner")
你刚得知有位嘉宾无法赴约,因此需要另外邀请一位嘉宾
 以完成练习3-4 时编写的程序为基础,在程序末尾添加一条print 语句,指出哪
位嘉宾无法赴约
 修改嘉宾名单,将无法赴约的嘉宾的姓名替换为新邀请的嘉宾的姓名

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

name_list=['Joker','Tom','Ming']
print(name_list[0]+":Welcome to dinner")
print(name_list[1]+":Welcome to dinner")
print(name_list[2]+":Welcome to dinner")
print(name_list.pop(1)+":busy")
name_list.append("Messi")
print(name_list[0]+":Welcome to dinner")
print(name_list[1]+":Welcome to dinner")
print(name_list[2]+":Welcome to dinner")
你刚找到了一个更大的餐桌,可容纳更多的嘉宾。请想想你还想邀请哪三位嘉宾
 以完成练习3-4 或练习3-5 时编写的程序为基础,在程序末尾添加一条print 语
句,指出你找到了一个更大的餐桌

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

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

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

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

name_list=['Joker','Tom','Ming']
print(name_list[0]+":Welcome to dinner")
print(name_list[1]+":Welcome to dinner")
print(name_list[2]+":Welcome to dinner")

print(name_list.pop(1)+":busy")
name_list.append("Messi")
print(name_list[0]+":Welcome to dinner")
print(name_list[1]+":Welcome to dinner")
print(name_list[2]+":Welcome to dinner")

print("Find a big table")
name_list.insert(0,"Ronaldo")
name_list.insert(3,"Maradona")
name_list.append("Beckham")
for i in name_list:
    print (i+":Welcome to dinner")
你刚得知新购买的餐桌无法及时送达,因此只能邀请两位嘉宾。
 以完成练习3-6 时编写的程序为基础,在程序末尾添加一行代码,打印一条你只能邀请两位嘉宾共进晚餐的消息
 使用pop()不断地删除名单中的嘉宾,直到只有两位嘉宾为止。每次从名单中弹出一位嘉宾时,都打印一条消息,让该嘉宾知悉你很抱歉,无法邀请他来共进晚餐
 对于余下的两位嘉宾中的每一位,都打印一条消息,指出他依然在受邀人之列

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

name_list=['Joker','Tom','Ming']
print(name_list[0]+":Welcome to dinner")
print(name_list[1]+":Welcome to dinner")
print(name_list[2]+":Welcome to dinner")
print()
print(name_list.pop(1)+":busy")
name_list.append("Messi")
print(name_list[0]+":Welcome to dinner")
print(name_list[1]+":Welcome to dinner")
print(name_list[2]+":Welcome to dinner")
print()
print("Find a big table")
name_list.insert(0,"Ronaldo")
name_list.insert(3,"Maradona")
name_list.append("Beckham")
for i in name_list:
    print (i+":Welcome to dinner")
print()
print()
print('Sorry,just two')
n=len(name_list)
for i in range(n-2):
    name=name_list.pop()
    print(name+":sorry")
print(name_list[0]+":Welcome to dinner")
print(name_list[1]+":Welcome to dinner")
del name_list[:]
print (name_list)

可读性差了些,凑合着看吧。。。


列表学习2:

列表除一些方法可以对它操作外,还有一些函数也可以,比如之前用的len函数,sorted函数。另外还有一些函数比较常用,像max(找出最大值并返回),min(找出最小值并返回),sum(求和),不同的数据类型不可以比较

>>> test_compare1=[1,3,8,11,21,5]
>>> test_compare2=['2','54','Andy','Ming']
>>> max(test_compare1)                           #返回列表中最大的值
21
>>> min(test_compare2 )                          #返回列表中最小的值,字符串可能比较的是ASCII码值
'2'
>>> sum(test_compare1 )                          #求和
49
>>> test_compare3=[1,9,'3',6]                    #不同的数据类型在列表里不能用这些函数
>>> max(test_compare3 )
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    max(test_compare3 )
TypeError: '>' not supported between instances of 'str' and 'int'
>>> 

列表解析,列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素

squares = [value**2 for value in range(1,11)]
要创建自己的列表解析,需要经过一定的练习,但能够熟练地创建常规列表后,你会发现这样做是完全值得的。当你觉得编写三四行代码来生成列表有点繁复时,就应考虑创建列表解析了

切片是列表很实用的功能,可以对列表部分元素进行处理。像之前的例子中,如果你要打印出索引为0,1,2的元素,需要一个个打印出来,而用切片可以一起打印出来,不过切片本质上还是一个列表

>>> test=['test1','test2','test3','test4','test5']
>>> test[1:4]                       #将列表test从索引1的元素开始到索引3结束取出得到一个新的列表,这就是切片,注意,只到索引4前面一个,不包括4
['test2', 'test3', 'test4'] 
>>> test[:3]                        #没有指定起始索引,默认从索引0开始
['test1', 'test2', 'test3']
>>> test[:]                         #没有指定起始和结尾索引,就是整个列表
['test1', 'test2', 'test3', 'test4', 'test5']
>>> 

小练习:

数到20:使用一个for 循环打印数字1~20(含)

for i in range(1,21,1):
    print (i)

创建一个列表,其中包含数字1~1 000 000,再使用一个for 循环将这些数字打印出来(如果输出的时间太长,按Ctrl + C 停止输出,或关闭输出窗口)

num=[]
for i in range(1,1000001,1):
    num.append(i)
    print(num[i-1])

创建一个列表,其中包含数字1~1 000 000,再使用min()和max()核实该列表确实是从1 开始,到1 000 000 结束的。另外,对这个列表调用函数sum(),看看Python 将一百万个数字相加需要多长时间

print(max(num),min(num))
print(sum(num))

创建一个列表,其中包含3~30 内能被3 整除的数字;再使用一个for循环将这个列表中的数字都打印出来

num=[]
for i in range(3,31,3):
    num.append(i)
for i in num:
    print (i)

使用列表解析生成一个列表,其中包含前10 个整数的立方

[i**3 for i in range(1,11)]

元组小练习:

有一家自助式餐馆,只提供五种简单的食品。请想出五种简单的食品,并将其存储在一个元组中
 使用一个for 循环将该餐馆提供的五种食品都打印出来
 尝试修改其中的一个元素,核实Python 确实会拒绝你这样做

 餐馆调整了菜单,替换了它提供的其中两种食品。请编写一个这样的代码块:给元组变量赋值,并使用一个for 循环将新元组的每个元素都打印出来

>>> foods=('cake','seafood','Coffee','Bread','milk')
>>> for name in foods:
	print (name,end=' ')

	
cake seafood Coffee Bread milk 
>>> foods[0]='tea'
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    foods[0]='tea'
TypeError: 'tuple' object does not support item assignment
>>> foods=('cake','seafood','Lemon tea','Bread','steak')
>>>  for name in foods:
	 
SyntaxError: unexpected indent
>>> for name in foods:
	print(name,end=' ')

	
cake seafood Lemon tea Bread steak 
>>> 
元组是不可变的,所以它的可操作性较小,相对于列表来说用的地方不多


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值