python基础--元组,集合和字典

元组的创建

列表:打了激素的数组
元组:带了紧箍咒的列表
不可变数据类型,没有增删改查
可以存储任意数据类型
“”"
定义元组

t = (1,1.2,True,'westos')
print(t,type(t))

如果元组里面包含可变数据类型,可以间接修改元组内容

t1 = ([1,2,3],4)
t1[0].append(4)
print(t1)

t2 = ()
print(t2)
t3 = tuple([])
print(t3)
l4 = list(())
print(l4)

元组如果只有一个元素,后面一定要加逗号,否则数据类型不确定

t4 = (1,)
print(t4,type(t4))

元组的特性

tuple=(1,1.3,True,'curry')

索引

print(tuple[0])
print(tuple[-1])

切片

print(tuple[1:])
print(tuple[::-1])
print(tuple[:-1])

连接
除了数值类型之外,不同的数据类型之间不能连接

print(tuple+(1,2,3))

重复

print(tuple*5)

for循环

for i in tuple:
    print(i)

成员操作符

print(1 in tuple)
print(1 not in tuple)

元组的常用方法

t = (1,2,'a','c','a')

查看元素的索引值

print(t.index('c'))

查看元素在元组中出现的次数

print(t.count('a'))

元组的应用场景

元组的赋值:有多少元素,就有多少变量接收

t =('westos',10,100)
name,age,score=t
print(name,age,score)

scores = (100,89,45,78,45)

先对元组进行转换

scoresli = list(scores)
scoresli.sort()
print(scoresli)
score_list = sorted(scores)
print(score_list)

比赛计分器

scores = (100, 98, 65, 78, 89)
scores = sorted(scores)
#python2中*middle不能使用
min_score, *middle, max_score = scores
#默认依次为最小值,中间值,最大值,middle是一个列表
print(max_score,middle,min_score)
print('最终成绩为%s' % (sum(middle) / 4))

深拷贝和浅拷贝

不可变数据类型 深拷贝和浅拷贝都不会改变地址
可改变数据类型
浅拷贝只是拷贝了外壳,内在的地址依然是不变的,只是一个指向
深拷贝将所以的东西都拷贝的新的地址,地址是变的

In [1]: import copy                                                             

In [2]: a=[1,2]                                                                 

In [3]: b=[3,4]                                                                 

In [4]: c=(a,b)                                                                 

In [5]: d=copy.copy(c)                                                          

In [6]: e=copy.deepcopy(c)                                                      

In [7]: d                                                                       
Out[7]: ([1, 2], [3, 4])

In [8]: e                                                                       
Out[8]: ([1, 2], [3, 4])

In [9]: id(c)                                                                   
Out[9]: 140589617825032

In [10]: id(d)                                                                  
Out[10]: 140589617825032

In [11]: id(e)                                                                  
Out[11]: 140589618049160

In [12]: id(d[0])                                                               
Out[12]: 140589618109512

In [13]: id(e[0])                                                               
Out[13]: 140589618009672

In [14]: id(c[0])                                                               
Out[14]: 140589618109512
In [15]: a=(1,2)                                                                

In [16]: b=(3,4)                                                                

In [17]: c=(a,b)                                                                

In [18]: d=copy.copy(c)                                                         

In [19]: e=copy.deepcopy(c)                                                     

In [20]: id(c)                                                                  
Out[20]: 140589617058632

In [21]: id(d)                                                                  
Out[21]: 140589617058632

In [22]: id(e)                                                                  
Out[22]: 140589617058632

In [23]: id(d[0])                                                               
Out[23]: 140589617029960

In [24]: id(e[0])                                                               
Out[24]: 140589617029960

In [25]: id(c[0])                                                               
Out[25]: 140589617029960

集合的定义

集和里面的元素是不可重复的

s = {1,2,3,4,5,6,6,3,3,2}
print(s,type(s))
s1 = {1}
print(s1,type(s1))

如何定义一个空集和

s2 = {}  #默认情况是dict,称为字典
print(s2,type(s2))

定义一个空集和

s3 = set([])
print(s3,type(s3))

集和应用1:列表去重

li = [1,2,3,4,1,2,3]
print(list(set(li)))

集合的特性

集和支持的特性只有 成员操作符(索引 切片 重复 连接 均不支持)

s = {1,2,3}

print(1 in {1,2,3})
print(1 not in s)

for循环

for i in s:
    print(i,end=' ')
print()
print('~~~~~~')

for + index

for i,v in enumerate(s):
    print('index: %s,value:%s' %(i,v))

集合的常用方法

添加顺序,和在集合中存储的顺序不同

s={6,7,3,1,2,3}

增加

s.add(9)
print(s)

增加多个元素

s.update({10,11,23})
print(s)

删除

s.pop()     #会弹出第一个元素
print(s)

删除指定元素(元素要存在)

s.remove(23)
print(s)

s1 = {1, 2, 3}
s2 = {2, 3, 4}
并集

print('并集:', s1.union(s2))
print('并集:', s1 | s2)

交集

print('交集:', s1.intersection(s2))
print('交集:', s1 & s2)

差集
可以理解为s1中有哪些s2中没有的元素

print('差集:', s1.difference(s2))
print('差集:', s1 - s2)

对等差分:并集-交集

print('对等差分:', s1.symmetric_difference(s2))
print('对等差分:', s1 ^ s2)

s3={1,2}
s4={1,2,3}

s3是否为s4的子集

print(s3.issubset(s4))

s3是否为s4的超集

print(s3.issuperset(s4))

两个集合是不是不相交

print(s3.isdisjoint(s4))

去重排序练习题

华为机测题:
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性
他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,对于
其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的学号,然后再把这些
数从小到大排序,按照排好的顺序去找同学做调查,请你协助明明完成“去重”与排序工作

import random

s=set()
num = int(input('请输入1到1000之间的一个整数:'))
for i in range(num):
    number=random.randint(1,1000)
    s.add(number)
print(sorted(s))

在这里插入图片描述

字典的创建

d={}
print(type(d))

字典:key-value键值对存储的一种数据结构
value值可以是任意数据类型:int float long list tuple set

d={
    'curry':[30,'男','投篮'],
    'james':[33,'男','上篮']
}

print(d)
print(d['curry'])

字典的嵌套

nbastar={
    '30':{
        'name':'stephen curry',
        'age':30,
        'team':'warriors'
    },
    '23':{
        'name':'lebron james',
        'age':33,
        'team':'lakers'
    }
}
print(nbastar['30']['team'])

工厂函数

d5=dict(a=1,b=5)
print(d5)

字典的创建

d = {
    '1': 'a',
    '2': 'b',
    '3': 'c'
}
print(d['1'])

字典不支持索引和切片
字典的重复和连接是无意义的,字典的key是唯一的

成员操作符判断的是某个值是否为字典的key

print('1' in d)
print('1' not in d)

字典的for循环默认遍历字典的key值

for key in d:
    print(key)

遍历字典

for key in d:
    print(key, d[key])

字典的增加和删除

nbastar = {
    'curry': 30,
    'james': 23,
    'kobe': 24
}

增加一个元素,key值存在更新,不存在添加

nbastar['rose'] = 1
print(nbastar)

添加多个,key值存在更新,不存在添加,用另一个字典去更新原来的字典

nbastar1 ={
      'klay':11,
     'durant':35
 }

update方法的key值不能为数字

nbastar.update(nbastar1)
print(nbastar)
nbastar.update(wesborook=0)
print(nbastar)

setdefault添加key值,key值存在不修改,不存在则添加

nbastar.setdefault('curry',32)
print(nbastar)
nbastar.setdefault('paul',3)
 print(nbastar)

nbastar2 = {
    'curry': 30,
    'james': 23,
    'kobe': 24,
    'harden': 13
}

del关键字

del nbastar2['harden']
print(nbastar2)

pop 删除指定的key的key-value值,如果存在,删除,并且返回删除key对应的value值
如果key不存在直接报错

player=nbastar2.pop('harden')
print(player)
print(nbastar2)

popitem删除最后一个key-value

player  = nbastar2.popitem()
print(player)
print(nbastar2)

清空字典的内容

nbastar2.clear()
print(nbastar2)

字典的修改和查看

nbastar = {
    'curry': 30,
    'james': 23,
    'kobe': 24
}

查看字典里面的key值

print(nbastar.keys())

查看字典里面的所有value值

print(nbastar.values())

遍历字典

for k,v in nbastar.items():
    print(k,'----->',v)
for k in nbastar:
    print(k,'---->',nbastar[k])

查看指定key对应的value值
key值不存在,程序就会报错

print(nbastar['curry'])

get 方法获取指定key对应的value值
如果key值存在,返回对应的value值
如果key值不存在,默认返回None,如果需要指定返回的值,传值即可

print(nbastar.get('harden'))
print(nbastar.get('harden','player not in nbastar'))

字典的练习

随机生成卡号,卡号为6102009开头,后面3位一次是(001,002…100)
默认卡号密码位‘redhat’
输出格式为
卡号 密码
6102009001 000000
“”"

card = []

for i in range(100):
    s = '6102009%.3d' %(i+1)
    card.append(s)
card_dict = {}.fromkeys(card,'redhat')
#print(card_dict)
print('卡号\t\t\t\t\t密码')
for k in card_dict:
    print('%s\t\t\t%s' %(k,card_dict[k]))

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37206112/article/details/84558042