【Python】Python入门第三课——Python简单序列(列表,元组,字典,集合)

在第二课中我们初步认识了列表、元祖和字典。这节课我们来系统地深入学习一下。


一.Python序列简介

通俗地讲,序列就是一块用来存放多个值的连续内存空间。

Python中常用的序列有“列表”、“元组”、“字典”、“字符串”、“集合”等等。
除了字典和集合属于无序序列之外,列表、元组、字符串等序列都支持双向索引。

注意,序列的第一个元素下标都是“0”。(和C语言中数组一样)

还有,就是Python竟然可以用“负数”作为序列下标!最后一个元素下标为-1,倒数第二个为-2,以此类推。


二.[列表]

1.Python的列表可以存放不同数据类型的数据,非常自由。
(列表可以直接用下标访问元素)

2.当列表删除或添加元素时,列表会自动扩展或收缩内存,始终保证列表元素所占的内存空间是连续的。

3.列表常用内置函数:
在这里插入图片描述

4.列表元素的加入:
①直接用“+”运算符:[x]+[y]两个链表无缝连接。
②x.append(k)方法:在列表最后加一个元素k。
③x.insert(index,obj)方法:在index位置插入obj元素。此时index号元素是插入的obj,其原位置上的数全部往后移一位,index号之前的元素不移动。
④x.extend([y])方法:将列表y无缝衔接到列表x的尾部。
(注:x,y的地址均不变,属于原地操作)

5.列表元素的删除:
①deal x[k]方法:直接删除指定x[k]元素。
②x.pop(k)方法:删除指定k位置上的元素,并且可以返回这个弹出的元素。
③x.remove(m)方法:删除首次出现指定元素值m的元素。

6.列表排序:
①x.sort()方法:直接将列表元素“升序排列”。
另外:x.sorted()方法:返回升序排列的列表,不改变原列表。
②x.reverse()方法:直接将列表元素“降序排列”。
另外:x.reverse()方法:返回降序排列的列表

7.其他操作:
①for循环遍历列表:

x=[1,2,3,4,5,6,7]
for i in range(0,len(x),1):    #循环语句遍历列表
    print(x[i])

②复合列表全展开:x=[num for elem in x for num in elem]

x=[(1,2,3),[4,5,6],{7:'a',8:'b',9:'c'},"lwcsb"]  
x=[num for elem in x for num in elem]
print(x)

※补充:切片操作

切片操作适用于列表,元素,字符串等。
切片的意思是从序列中切出一部分出来,进行一些操作。

切片操作的语法:x[a : b : c]。【由三个数字和两个冒号组成】
a代表切片开始位置(算入),不写默认从0开始;
b代表切片结束位置(不算入),不写默认为表尾;
c代表步长,不写默认为1。

切片内可以简写:
比如x[::2]就是从头到尾以步长为2切片。
比如x[:3]就是从头以步长1一直切到3号元素。
再比如x[3:7]就是从3号以步长1切到7号。
(但是保险起见,增加可读性,还是写全吧~~)

灵活运用切片可以完成一些比较好的操作:

①把整个序列倒着输出一遍:x[::-1]

x=[1,2,3,4,5,6,7]
print(x[::-1])

②append方法在中间插入:(不太推荐,没啥意思,纯整活)

x=[1,2,3,4,5,6,7]
x[3:4]=[x[3],9]
print(x)

③原地修改列表,原地改动列表:

x=[1,2,3,4,5,6,7]
x[:3]=[8,8,8]   #切出[1,2,3],暂时调用并修改成[8,8,8]
print(x)
x=[1,2,3,4,5,6,7]
x[len(x):]=[8]  #从表尾开始切(其实就是没切),在最后填上[8],相当于append
print(x)
x=[1,2,3,4,5,6,7]
del x[:3]     #切出[1,2,3],删除之
print(x)

三.(元组)

1.元组是不可变序列:其形式是x=(1,2,3,…,n),可以存放各种数据类型的数。

元组一旦创建,用任何方法都不能改变其中元素值,也无法添加或删除元素。

2.切片适用于元组,但只能用切片访问元组的元素,不能改变。

3.元组的不可变性只适用于元组自身顶层,而非其内容。运行下面的代码,你就会知道:

x=[[1,2],3,4,5]
x[0][0]=8
print(x)   #打印结果是[[8,2],3,4,5]

4.列表和元组的互化:【!!!重要!!!】

list()方法可以使元组变为列表;tuple()方法可以使列表变为元组。
由于列表是可变的,元组是不可变的,所以利用这两个方法,相当于对序列内的数据进行“冻结”和“解冻”,改变序列的可改写性。

x=(1,2,3)
#x(1)=8   报错,元组是不可变序列
x=list(x)  #x变为列表
x[1]=8
print(x)
x=tuple(x) #x变为元组
print(x)

四.{字:典}

1.字典是无序可变序列,由一个个“键值对”组成。所谓“键值对”,即一个关键字+一个数据域。其形式如下:

x={a:b} 其中a是键,b是值。用花括号集中多个键值对形成字典。
键a:不能是列表、集合、字典,其他数据类型均可。(元组、数字、字符串…)

2.字典的创建:
①直接赋值写出。
②运用dict( )方法复合zip( )方法对两个列表(键列表、值列表)进行打包:

keys=[1,2,3,4,5]
values=["Midway","Iowa","NorthCarolina","SouthCarolina","Alaska"]
x=dict(zip(keys,values))
print(x)

3.字典元素的获取:
①直接使用“键”索引,获取对应“值”。
②使用get( )方法,但仍然是“键”索引获取对应“值”。

x={1:'a',2:'b',3:[1,2],"4":5,5:"LWCSB"}
print(x[5])
print(x.get("4"))

【注意:get()方法不只是如此:

get(key,default):键key存在则返回相应的值,否则返回default。

这个延伸的get方法在后面会用到!】

③items( )方法遍历“键值对”。
④values( )方法遍历“值”。
⑤keys( )方法遍历“键”。
以上三种用法需要借助for循环实现:

x={1:'a',2:'b',3:[1,2],"4":5,5:"LWCSB"}

for k in x.items():   #遍历键值对
    print(k)
for k in x.values():  #遍历值
    print(k)
for k in x.keys():    #遍历键
    print(k)

4.字典元素的添加:
①直接对指定“键”的值赋值修改。如果找不到对应键,直接在字典里添加该键值对。

c
x[1]="Kongo"
x[9]="Zao"    #找不到要修改的键值对,自动添加该键值对
print(x)

②运用update( )方法:
直接将新的字典融合进原字典。如果两个字典有“键”冲突,则这个“键”对应新的字典的值。(不然怎么叫“更新”对吧~)

x={1:'a',2:'b',3:[1,2],"4":5,5:"LWCSB"}
x.update({1:'k',(6,7):"Yamato",8:"Fubuki"})
print(x)

5.字典元素的修改:
①del命令:删除指定“键”对应的元素。
②clear( )方法:清除字典中的所有元素。
③pop( )方法:删除指定键对应的元素,但只返回“值”。
④popitem( )方法:删除最后一个元素,返回键值对。(不接收参数)

x={1:'a',2:'b',3:[1,2],"4":5,5:"LWCSB"}
print(x.pop(1))
print(x.popitem())
print(x)

五.{集合}

1.集合的定义不用我多说了吧。其形式是:{1,2,3,4}
2.set( )方法:将其他可迭代对象转化为集合。(如:列表、元组)

list=[1,2,3,4,5]
x=set(list)
print(x)
y=set()   #创建一个空集
print(y)

3.add( )方法:添加元素。
4.pop( )方法:弹出第一个元素。(不接收参数)

x={1,2,34}
x.add(5)
print(x)
x.pop()
print(x)

5.集合操作:
①交集& 并集 | 差集-
②比较集合大小:> < >= <= ==
③测试是否为子集:issubset( )方法。

x={1,2,3,4,5}
y={1,2,3,6,7}
z={1,2,3,4}

print(x&y)
print(x|y)
print(x-y)

print(x>y)
print(x<y)

print(z.issubset(x))  #测试z是否为x的子集

六.序列应用实例

1.用“字典”统计文本中不同字符出现的个数:

text=input("输入一串字符:")
x=dict()                #创建一个空字典

for i in text:
    x[i]=x.get(i,0)+1
#用i遍历text的每一个字符。(i即text中的每一个字符)
#x[i]表示生成或调用 键为字符‘i’的字典元素,并将要为其赋值。
#x.get(i,0)+1:首先获取字典x中键为‘i’的元素的值,如果找不到则为0。
#然后进行+1统计操作,得到的值就是当前字符i的个数,重新赋给x[i]。

print(x)

2.用列表处理大量数据:
比如这个题目↓【感谢顾同学提供的题目!】
在这里插入图片描述
我们想要的效果是这样的:
在这里插入图片描述
我们要达到的效果是对数据进行集合处理,并且排序。

这是代码:

data=input()
x=data.split("\\n")
y=[]

for i in x:
    i=i.split(",")
    
    a1=i[0]       #a1代表年份(每一项的第一个)
    a2=int(i[1])  #a2代表后面的数字
    A=[a1,a2]     #A代表嵌套列表中的每一项
    
    y.append(A)   #逐一添加A
#print(y) 检查y的正确性

z=sorted(y,key=lambda y:y[-1])    
#sorted条件排序。sorted(目标列表,key=lambda 形参(代表列表中的元素):条件)
z=z[::-1]   #列表反向
#print(z) 检查z的正确性

for i in range(0,len(z),1):    #遍历输出
    print(z[i])
    
"""测试数据:
2020年,87\n2019年,96\n2018年,99\n2017年,99\n2016年,76\n2015年,87\n2014年,100\n2013年,86\n2012年,63\n2011年,66\n2010年,59\n2009年,81\n2008年,63\n2007年,74\n2006年,81\n2005年,79\n2004年,59
"""

这里面要素过多,我会分一期出来讲解。(可以先看我写的注释)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值