本单内容
>序列结构主要有列表、元组、集合、字典和字符串
>正向递增索引取值范围[0,N-1],反向递减索引取值范围[-1,-N]
> 切片操作语法结构:序列名[start:end:step]
>创建列表的方式:1)使用日直接创建2)使用内置函数list()创建> 列表的相关操作方法:
添加方法:
- append()和insert()
- 删除方法:clear()、remove()、pop()
- 列表元素的排序:sort()和内置函数sorted()
- 其它方法:reverse()和copy()
>创建元组的方式:1)使用()直接创建 2)使用内置函数tuple()创建
> 创建字典的方式:1)使用小直接创建 2)使用内置函数dict()
> 使用内置函数dict()创建字典的两种方式:
- 通过映射函数zip(Ist1,lIst2)创建字典
- 通过给定关键字创建字典dict(key1=value1,key2=value2.....)
> 字典的相关操作方法:
- 查询方法:get()、keys()、values()和items()
- 删除方法:pop()、popitem()和clear()
> 创建集合的方式:1)使用心直接创建 2)使用内置函数set()创建
> 集合的相关操作方法:
- 添加方法:add()
- 删除方法:remove()和clear()
>列表、字典、集合都是Python中的可变数据类型,元组是Python中的不可变数据类型
>列表、元组、字典和集合的遍历都可以通过for循环实现
>列表、元组、字典和集合的删除都可以使用语句 del 来实现
本单示例
示例5-1使用索引检索字符串中的元素
#正向递增索引
s='helloworld'
for i in range(0,len(s)):
print(i,s[i],end= '\t\t')
print('\n---------------------')
#逆向递减索引
for i in range(-10,0):
print(i,s[i],end='\t\t')
print('\n',s[9],s[-1])
示例5-2序列的切片操作
s='helloworld'
#切片操作
s1=s[0:5:2] #索引从0开始,到5结束(不包括5)步长为2
print(s1)
#省略了开始位置,start默认从0开始
print(s[:5:1])
#省略了开始位置start,省略了步长step
print(s[:5:])
#省略结束位置
print(s[0::1])
print(s[5::])
print(s[5:]) #12行代码与13行代码功能相同,省略了结束,和步长
#更改步长为2
print(s[0:5:2])
#省略开始位置,结束位置,只写步长
print(s[::2]) #分别取0,2,4,6,8索引位置的元素
#步长为负数
print(s[::-1])
print(s[-1:-11:-1])
示例5-3序列的相加和加乘操作
s='Hello'
s2='World'
print(s+s2)
print(s*5)
print('-'*40)
示例5-4序列的相关操作符和函数的使用
s='helloworld'
print('e在helloworld中存在吗?',('e' in s))
print('v在helloworld中存在吗?',('v' in s))
print('e在helloworld中不存在吗?',('e' not in s))
print('v在helloworld中不存在吗?',('v' not in s))
#内置函数的使用
print('len():',len(s))
print('max():',max(s))
print('min():',min(s))
#序列对象的方法
print('s.index():',s.index('o')) #o在字符串中第一次出现的位置
#print('s.index():',s.index('v')) #ValueError: substring not found v在字符串中不存在,报错
print('s.count():',s.count('o')) #统计o在字符串中出现的次数
示例5-5列表的创建与删除
#第一种创建列表的方式
lst=['hello','world',98,100,5]
print(lst)
#可以使用内置函数list()创建列表
lst2=list('helloworld')
lst3=list(range(1,10,2))
print(lst2)
print(lst3)
print(lst+lst2+lst3)
print(lst*3)
print(len(lst))
print(max(lst3))
print(min(lst3))
print(lst2.count('o'))
print(lst2.index('o'))
lst4=[10,20,30]
print(lst4)
del lst4
#print(lst4) #NameError: name 'lst4' is not defined. Did you mean: 'lst'?
示例5-6列表的遍历操作
lst=['hello','world','python','php']
for item in lst:
print(item)
for i in range(0,len(lst)):
print(i,'--->',lst[i])
for index,item in enumerate(lst):
print(index,item)
for index,item in enumerate(lst,start=1):
print(index,item)
for index,item in enumerate(lst,1):
print(index,item)
示例5-7列表的相关操作
lst=['hello','world','python']
print('原列表:',lst,id(lst))
lst.append('sql')
print('增加元素之后,',lst,id(lst))
lst.insert(1,100)
print(lst)
lst.remove('world')
print('删除元素之后的列表:',lst,id(lst))
print(lst.pop(1))
print(lst)
# lst.clear()
# print(lst,id(lst))
lst.reverse()
print(lst)
new_lst=lst.copy()
print(lst,id(lst))
print(new_lst,id(new_lst))
lst[1]='mysql'
print(lst)
示例5-8列表的排序操作
lst=[4,56,3,78,40,56,89]
print('原列表:',lst)
#排序,默认是升序
lst.sort()
print('升序之后的列表:',lst)
lst.sort(reverse=True)
print('降序:',lst)
print('-'*40)
lst2=['banana','apple','Cat','Orange']
print('原列表:',lst2)
lst.sort()
print('升序之后的列表:',lst2)
lst2.sort(reverse=True)
print('降序:',lst2)
#忽略大小写进行排序
lst2.sort(key=str.lower)
print(lst2)
示例5-9列表的排序sorted
lst=[4,56,3,78,40,56,89]
print('原列表:',lst)
#排序
asc_lst=sorted(lst)
print('升序:',asc_lst)
print('原列表:',lst)
#降序
desc_lst=sorted(lst,reverse=True)
print('降序:',desc_lst)
print('原列表:',lst)
lst2=['banana','apple','Cat','Orange']
print('原列表:',lst2)
#忽略大小写进行排序
new_lst2=sorted(lst2,key=str.lower)
print('原列表:',lst2)
print('升序:',new_lst2)
示例5-10列表生成式的使用
import random
lst=[item for item in range(1,11)]
print(lst)
lst=[item*item for item in range(1,11)]
print(lst)
lst=[random.randint(1,100) for _ in range(10)]
print(lst)
#从列表当中选择符合条件的元素组成新列表
lst=[i for i in range(10) if i%2==0]
print(lst)
示例5-11二维列表的生成与遍历
#创建二维列表
lst=[
['城市','环比','同比'],
['北京',102,103],
['上海',104,504],
['深圳',100,39]
]
print(lst)
#遍历二维列表
for row in lst:
for item in row:
print(item,end='\t')
print()
lst2=[ [j for j in range(5)] for i in range(4)]
print(lst2)
示例5-12元组的创建和删除
t=('hello',[10,20,30],'python','world')
print(t)
t=tuple('helloworld')
print(t)
t=tuple([10,20,30])
print(t)
print('10在元组中是否存在:',(10 in t))
print('10在元组中不存在:',(10 not in t))
print('最大值:',max(t))
print('最小值:',min(t))
print('len:',len(t))
print('t.index:',t.index(10))
print('t.count:',t.count(10))
t=(10)
print(t,type(t))
y=(10,)
print(y,type(y))
del t
print(t)
示例5-13元组元素的访问与遍历
t=('python','hello','world')
print(t[0])
t2=t[0:3:2]
print(t2)
for item in t:
print(item)
for i in range(len(t)):
print(t[i])
for index,item in enumerate(t,start=11):
print(index,'---->',item)
示例5-14元组生成式
t=(i for i in range(1,4))
print(t)
# t=tuple(t)
# print(t)
# for item in t:
# print(item)
print(t.__next__())
print(t.__next__())
print(t.__next__())
t=tuple(t)
print(t)
示例5-15字典的创建与删除
#(1)创建字典
d={10:'cat',20:'dog',30:'pet',20:'zoo'}
print(d)
#(2)zip函数
lst1=[10,20,30,40]
lst2=['cat','dog','pet','zoo','car']
zipobj=zip(lst1,lst2)
print(zipobj)
# print(list(zipobj)) #[(10, 'cat'), (20, 'dog'), (30, 'pet'), (40, 'zoo')]
d=dict(zipobj)
print(d)#{10: 'cat', 20: 'dog', 30: 'pet', 40: 'zoo'}
#(3)使用参数创建字典
d=dict(cat=10,dog=20)
print(d)
t=(10,20,30)
print({t:10})
# lst=[10,20,30]
# print({lst:10}) #TypeError: unhashable type: 'list'
print('max:',max(d))
print('min:',min(d))
print('len:',len(d))
# del d
# print(d) #NameError: name 'd' is not defined. Did you mean: 'id'?
示例5-16字典元素的访问和遍历
d={'hello':10,'world':20,'python':30}
#访问字典中的元素
#(1)使用d[key]
print(d['hello'])
#(2)d.get(key)
print(d.get('hello'))
#二者区别:如果key不存在,d[key]报错,d.get(key)可以指定默认值
#print(d['java']) #KeyError: 'java'
print(d.get('java'))
print(d.get('java','不存在'))
for item in d.items():
print(item)
for key,value in d.items():
print(key,'---->',value)
示例5-17字典的相关操作方法
d={1001:'李海',1002:'王华',1003:'张峰'}
print(d)
d[1004]='张丽丽'
print(d)
keys=d.keys()
print(keys)
print(list(keys))
print(tuple(keys))
values=d.values()
print(values)
print(list(values))
print(tuple(values))
lst=list(d.items())
print(lst)
d=dict(lst)
print(d)
print(d.pop(1001))
print(d)
print(d.pop(1008,'不存在'))
print(d.popitem())
print(d)
d.clear()
print(d)
print(bool(d))
示例5-18字典的生成式
import random
d={item:random.randint(1,100) for item in range(4)}
print(d)
lst=[1001,1002,1003]
lst2=['陈梅梅','王一一','李丽丽']
d={key:value for key,value in zip(lst,lst2)}
print(d)
示例5-19集合的创建与删除
s={10,20,30,40}
print(s)
# s={[10,20],[30,40]}
# print(s) #TypeError: unhashable type: 'list'
s=set()
print(s)
s={}
print(s,type(s))
s=set('helloworld')
print(s)
s2=set([10,20,30])
print(s2)
s3=set(range(1,10))
print(s3)
print('max:',max(s3))
print('min:',min(s3))
print('len:',len(s3))
print('9在集合中存在',(9 in s3))
print('9在集合中不存在',(9 not in s3))
# del s3
# print(s3) #NameError: name 's3' is not defined. Did you mean: 's'?
示例5-20集合的操作符
A={10,20,30,40,50}
B={30,50,88,76,20}
#交集
print(A&B)
#并集
print(A|B)
#差集
print(A-B)
#补集
print(A^B)
示例5-21集合的相关操作
s={10,20,30}
#向集合中添加元素
s.add(100)
print(s)
#删除元素
s.remove(20)
print(s)
#清空集合中所有的元素
# s.clear()
# print(s)
for item in s:
print(item)
for index,item in enumerate(s):
print(index,'---->',item)
s={i for i in range(1,10)}
print(s)
s={i for i in range(1,10) if i%2==1}
print(s)
示例5-22结构的模式匹配
data=eval(input('请输入需要匹配的数据:'))
match data:
case {'name':'ysj','age':30}:
print('字典')
case [10,20,30]:
print('列表')
case (10,20,30):
print('元组')
case _:
print('')
示例5-23合并字典运算符
d1={'a':10,'b':20}
d2={'c':30,'d':40,'e':50}
mergd_dict=d1|d2
print(mergd_dict)
示例5-24同步迭代
fruits={'apple','orange','pear','grape'}
counts={10,3,4,5}
for f,c in zip(fruits,counts):
match f,c:
case 'apple',10:
print('10个苹果')
case 'orange',3:
print('3个橘子')
case 'pear',4:
print('4个犁')
case 'grape',5:
print('5串葡萄')
注:本文中内容及示例均出自@Python_子木视频
ae4476f8-7275-4323-850d-ba0f1a1d657b