Python学习 第5章-组合数据类型

本单内容

>序列结构主要有列表、元组、集合、字典和字符串

>正向递增索引取值范围[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
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值