Python下的元组,set集合,字典(解释器为python3.6)

一.Python下的元组(tuple)——不可变类型

1.Python的内置的一种数据类型是列表:tuple。

Python的元祖和列表相似,不同之处在于:元组是不可变类型,元组的元素一旦声明,就不能再修改,即元组在声明之后长度就是固定的。元素可以是任意类型的数据。

2.元组(tuple)同字符串一样也有len函数。

3.元组(tuple)同字符串一样也有下标索引。(正着从0开始,倒着从-1开始)。超出索引时,回报错。

4.元组(tuple)同字符串一样也有切片。

5.元组(tuple)同字符串一样也有计算(加法和乘法)。——只局限于同类型(同是元组)

6.元组(tuple)同字符串一样也有成员运算符。

7.元组(tuple)同字符串一样也支持for循环。

8.元组(tuple)的定义方法:

names=(100,'200',True,2.3,(100,200,'300'))           #列表中的元素可以是任意类型,当然也包括列表,元组,set集合,字典。

值的注意的是,元组如果只有一个元素的时候,后面一定要加逗号,否则数据类型不确定

t2=('hello',)
t3=('hello')
print(type(t2))      #输出<class 'tuple'>
print(type(t3))      #输出<class 'str'>

如何定义一个空元组呢?

t=()                                                 #定义一个空元组

print(t)                  #输出()
print(type(t))        #输出<class 'tuple'>

t=tuple()                                        #定义一个空元组                                          
print(t)             #输出()
print(type(t))   #输出<class 'tuple'>

值的注意的是:当元组中嵌套列表,元组,set集合,字典,字符串——>有下标索引时,列表的索引和切片的写法:即[]是可以多个出现的,只要有索引这个属性就行。

service=(('http',80),('ssh',22),'hello',('ftp',21))
print(service[1][1])        #输出22
print(service[-1][1])       #输出21
print(service[:][1])         #输出('ssh', 22),同service[1]
print(service[:-1][0])      #输出('http', 80)                                       

9.因为元组(tuple)是不可变类型,所以没有增删改这三个操作,但是有查这个操作

元组里面包含可变数据类型,可以间接增,删,修元组的内容。

t=([1,2,3],4)
t[0].append(4)
print(t)      #输出([1, 2, 3, 4], 4)
t[0].remove(1)
print(t)       #输出([2, 3, 4], 4)
t[0][0]=5
print(t)       #输出([5, 3, 4], 4)

元组的查方法:

(1)not  in:不在,返回True;在,返回False——>成员操作符

service=('http','ssh','ftp','http')
print('http' not in service)       #输出False

(2)in:在,返回True;不在,返回False——>成员操作符

service=('http','ssh','ftp','http')
print('http' in service)            #输出True

(3)count:统计某个元素出现的次数

service=('http','ssh','ftp','http')
print(service.count('http'))        #输出2

(4)index:返回某个元素的下标位,默认返回第一个,并且从左往右数

service=('http','ssh','ftp','http')
print(service.index('http'))       #输出0
print(service.index('ssh'))       #输出1

10.元组(tuple)中的排序函数——>sorted函数。因为元组是不可变类型,所以没有sort()方法。——>用法同列表

sorted函数:默认升序排列,要使用sorted函数,必须保证列表中的元素是同类型的。

值的注意的是:元组排序之后,默认变为列表

1.练习一

(1)排序方法一:利用sorted函数

service=('alice','bob','harry','Bob')
print(sorted(service))       #输出['Bob', 'alice', 'bob', 'harry']。字母按照ASCII码进行排序。
print(service)                    #输出['alice', 'bob', 'harry', 'Bob']

(2)方法二:将元组转换为列表

service=('alice','bob','harry','Bob')
serviceli=list(service)
serviceli .sort()
print(serviceli)                 #输出['Bob', 'alice', 'bob', 'harry']。字母按照ASCII码进行排序。

service=('alice','bob','harry','Bob')
serviceli=list(service)
print(sorted(serviceli)) #输出['Bob', 'alice', 'bob', 'harry']。字母按照ASCII码进行排序。

2.练习二:

score = (100,89,45,78,65)
scores = sorted(score)
minscore,*middlescore,maxscore = scores           #其中*表示多个
print(minscore)             #输出45
print(middlescore)        #输出[65, 78, 89]
print(maxscore)            #输出100
print('最终成绩为: %.2f' %(sum(middlescore) / len(middlescore)))              #输出最终成绩为: 77.33

11.元组(tuple)的应用场景

(1)变量交换数值
 a = 1
 b = 2
 b,a = a,b
 #1.先把(a,b)封装成一个元组(1,2)
 #2.b,a=a,b ---> b,a=(1,2)
 #b = (1,2)[0] a = (1,2)[1]
 print(a)                   #输出2
 print(b)                   #输出1

(2)打印变量的值

name = 'westos'
age = 11
t = (name,age)
print('name:%s , age:%d'  %(name,age))              #输出name:westos , age:11
print('name:%s , age:%d'  %t)            #输出name:westos , age:11

(3)元组的赋值,有多少个元素,就用多少个变量接收

t = ('westos',11,100)
name,age,score = t
print(name,age,score)             #输出westos 11 100

二.Python下的set集合(set)——可变类型

1.Python的内置的一种数据类型是set集合:set

set是一种无序的集合,没有先后顺序(集合包括列表——list;元组——tuple;set集合——set;字典——dict)。可以随时添加和删除其中的元素。但,元素不可以重复,没有下标。元素可以是任意类型的数据。

2.set集合(set)同字符串一样也有len函数。

3.set集合(set)没有下标索引(这是因为set集合是无序的)

4.set集合(set)没有有切片(set集合没有下标索引,当然也就没有切片了)

5.set集合(set)没有计算(加法和乘法)。

6.set集合(set)同字符串一样也有成员运算符。

7.set集合(set)同字符串一样也支持for循环。

s = {1,2,3}
for  i  in  s:
    print(i,end='|')            #输出1|2|3|

8.set集合(set)的定义方法:

集合里面的元素是不可重复的。
s = {1,2,3,1,2,3,4,5}
print(s)                   #输出{1, 2, 3, 4, 5}
print(type(s))         #输出<class 'set'>


如何定义一个空集合
s2 = {}                       #这是定义了一个空字典
print(type(s2))           #输出<class 'dict'>

s3 = set([])                #或者s3=set(),定义一个空集合。
print(s3)                     #输出set()
print(type(s3))           #输出<class 'set'>

 

因为集合中的元素是不能重复的,所以可以利用集合来去重。

li = [1,2,3,1,2,3]
print(list(set(li)))          #输出[1, 2, 3],先将列表转换为set集合,再将set集合转换为列表。

9.set集合(set)的相关操作(增删查,没有改(因为没有下标索引))

<1>增(add,update)

#集合:无序的数据类型
#添加顺序和在集合中存储的顺序是不一定相同的

(1)add:增加一个元素

s = {6,7,8,9}

s.add(1)
print(s)               #输出{1, 6, 7, 8, 9}

(2)update:增加多个元素

s = {6,7,8,9}

s.update({5,3,2})           注意:添加的数据必须放到一个集合当中去(列表、元组、set集合)
print(s)               #输出{1, 2, 3, 5, 6, 7, 8, 9}

<2>删(pop,remove,del)

(1)pop:因为set集合是无序的,所以pop取set集合中的随便一个元素进行删除

s = {6,7,8,9}

s.pop()
print(s)           #输出{9, 6, 7}

s = {6,7,8,9}
a=s.pop()
print(s)           #输出{9, 6, 7}
print(a)           #输出8

(2)del:删除set集合——>不仅仅适用于set集合,也适用于字符串,列表,元组和字典。

s = {6,7,8,9}
del  s
print(s)           #输出会报错

(3)remove:类似于del,但其中要接的是删除的一个元素

s = {6,7,8,9}

s.remove(6)
print(s)          #输出{8, 9, 7}

<3>查(not  in,in)

(1)not  in:不在,返回True;在,返回False——>成员操作符

s = {6,7,8,9}

print(6 not in s)       #输出False

(2)in:在,返回True;不在,返回False——>成员操作符

s = {6,7,8,9}

print(6 in s)             #输出True

10.set集合中的并集,交集,差集,对等差分(并集-交集),超集,子集,两个集合是不是不相交

<1>并集

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

print('并集:',s1.union(s2))     #输出并集: {1, 2, 3, 4},或者print('并集:',s2.union(s1)
print('并集:',s1|s2)                 #输出并集: {1, 2, 3, 4},或者print('并集:',s2|s1

<2>交集

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

print('交集:',s1.intersection(s2))      #输出交集: {2, 3},或者print('交集:',s2.intersection(s1)
print('交集:',s1&s2)                           #输出交集: {2, 3},或者print('交集:',s2&s1

<3>差集

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

print('差集:',s1.difference(s2))       #s1-(s1&s2),输出差集: {1}
print('差集:',s2.difference(s1))       #s2-(s1&s2),输出差集: {4}

<4>对等差分(并集-交集)

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

print('对等差分:',s1.symmetric_difference(s2))      #输出对等差分: {1, 4},或者print('对等差分:',s2.symmetric_difference(s1))    
print('对等差分:',s1^s2)                                            #输出对等差分: {1, 4},或者print('对等差分:',s2^s1)  

<5>超集

s3 = {1,2}
s4 = {1,2,3}
#s3是否为s4的超集
#超集:如果s3中的每一个元素都在集合s4中,且s4中可能包含s3中没有的元素,
#那么s4就是s3的一个超集
print(s3.issuperset(s4))         #输出False
print(s4.issuperset(s3))         #输出True

<6>子集

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

#s3是否为s4的子集
print(s3.issubset(s4))           #输出True

print(s4.issubset(s3))           #输出False

<7>两个集合是不是不相交

#两个集和是不是不相交
print(s3.isdisjoint(s4))         #输出False,或者print(s4.isdisjoint(s3))  

11.set集合(set)中的排序函数——>sorted函数。因为set集合没有下标索引和切片,所以没有sort()方法。——>用法同列表

sorted函数:默认升序排列,要使用sorted函数,必须保证列表中的元素是同类型的。

值的注意的是:元组排序之后,默认变为列表

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

import random
s=set()
for i in range(int(input('N:'))):
    s.add(random.randint(1,1000))
print(s)

四.Python下的字典(dict)——可变类型

1.Python的内置的一种数据类型是字典:dict

字典使用键—值(key—value)来存放多个值。

key和value是一个整体,key和value组成一个元素。

字典中所有元素的键都是不可重复的,但值可以重复。

键和值可以是任意类型的数据。

字典是一种无序的集合,没有先后顺序(集合包括列表——list;元组——tuple;set集合——set;字典——dict)。可以随时添加和删除其中的元素。key值不可以重复,但value值可以重复,没有下标。

因为字典是一个无序的数据类型,所以使用print输出字典时,通常输出顺序和定义顺序不一致。

2.字典(dict)同set集合一样也有len函数。

3.字典(dict)同set集合一样,没有下标索引。(这是因为字典是无序的)。但是字典不同于set集合的是:字典可以利用键值来得到value值。

students={
    '03113009':{
        'name':'tom',
        'age':18,
        'score':80
    },
    '03113010':{
        'name':'laoli',
        'age':19,
        'score':30
    }
}
print(students)
#输出  {'03113009': {'name': 'tom', 'age': 18, 'score': 80}, '03113010': {'name': 'laoli', 'age': 19, 'score': 30}}
print(students['03113010']['name'])         #输出laoli

4.字典(dict)同set集合一样,没有有切片(字典没有下标索引,当然也就没有切片了)。

5.字典(dict)同set集合一样,没有计算(加法和乘法)。

6.字典(dict)同set集合一样,也有成员运算符。——>看的是字典的key值。

7.字典(dict)同set集合一样,也支持for循环。

1.遍历键

方法一:

d={'1':'a','2':'b'}
for key in d:
    print(key)

#输出 1
#         2

方法二:

d={'1':'a','2':'b'}
for key in d.keys():
    print(key)

#输出 1
#         2

2.遍历value值

方法一:

d={'1':'a','2':'b'}
for key in d:
    print(d[key])

#输出 a
#         b

方法二:

d={'1':'a','2':'b'}
for value in d.values():
    print(value)

#输出 a
#         b

3.遍历字典

方法一:

d={'1':'a','2':'b'}
for key in d:
    print(key,d[key])
#输出 1 a
#         2 b

方法二:

d={'1':'a','2':'b'}
for key,value in d.items():
    print(key,value)
#输出 1 a
#         2 b

8.字典(dict)的定义方法:

利用zip函数来定义字典

user=['user1','user2']
passwd=['123','456']
print(zip(user,passwd))                  #输出一个对象。<zip object at 0x7f869c59a308>
#想要输出一个字典,就必须利用强制类型转换。
print(dict(zip(user,passwd)))        #输出一个字典。{'user1': '123', 'user2': '456'}

print(set(zip(user,passwd)))         #输出{('user1', '123'), ('user2', '456')}
print(tuple(zip(user,passwd)))      #输出(('user1', '123'), ('user2', '456'))
print(list(zip(user,passwd)))          #输出[('user1', '123'), ('user2', '456')]

利用键—值对来定义字典

students={
    '03113009':{
        'name':'tom',
        'age':18,
        'score':80
    },
    '03113010':{
        'name':'laoli',
        'age':19,
        'score':30
    }
}

print(students)
#输出  {'03113009': {'name': 'tom', 'age': 18, 'score': 80}, '03113010': {'name': 'laoli', 'age': 19, 'score': 30}}

 

利用工厂函数来定义字典

d1=dict(a=1,b=2)                #值的注意的是,默认等号前面的是字符串,等号后面的是数字,等号后面的数据类型是可以改变的(比如加引号,变为字符串的数据类型);但是等号前面的数据类型是不可以改变的。

print(d1)               #输出{'a': 1, 'b': 2}
print(type(d1))     #输出<class 'dict'>

 

所有的value值一样时,如何快速定义字典?

d={}.fromkeys({1,2},'redhat')           #或d={}.fromkeys([1,2],'redhat')  或d={}.fromkeys((1,2),'redhat')  
print(d)
#输出  {1: 'redhat', 2: 'redhat'}

如何定义一个空字典呢?

d={}                          #定义一个空字典
print(type(d))           #输出<class 'dict'>

d=dict()                  #定义一个空字典
print(d)                   #输出{}
print(type(d))         #输出<class 'dict'>

9.字典(dict)的相关操作(增删改查)

<1>增:利用字典的key来增加一个元素;利用update来增加多个元素;利用setfault增加一个元素。

如果key值不存在,则添加对应的key-value值

(1)添加一个元素利用字典的key

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
service['mysql']=3306
print(service)
#输出  {'http': 80, 'ssh': 22, 'ftp': 21, 'mysql': 3306}

(2)添加多个元素:利用update函数

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
service_backup={'https':443,'oracal':888}
service.update(service_backup)
print(service)
#输出  {'http': 80, 'ssh': 22, 'ftp': 21, 'https': 443, 'oracal': 888}

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
service.update(https=443,oracal=888)
#输出  {'http': 80, 'ssh': 22, 'ftp': 21, 'https': 443, 'oracal': 888}

setdefault添加一个元素

如果key值存在,不做修改;如果key值不存在,则添加对应的key-value值。

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
service.setdefault('http',9090)               #http这个键存在,不做任何修改  
print(service)
#输出  {'http': 80, 'ssh': 22, 'ftp': 21}
service.setdefault('oracal',888)           #oracal这个键不存在,增加oracal这个键
print(service)
#输出  {'http': 80, 'ssh': 22, 'ftp': 21, 'oracal': 888}

<2>删(del,pop,popitemclear)

(1)del:可以删除字典某个key对应的value值;也可以删除整个字典

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
del service['http']
print(service)
#输出{'ssh': 22, 'ftp': 21}
del service
print(service)
#输出:报错NameError: name 'service' is not defined

(2)pop:pop删除指定key的key-value
                     #如果key存在,删除,并且返回删除key对应的value
                      #如果key不存在,报错

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
a=service.pop('http')
print(a)
#输出 80
print(service)
#输出 {'ssh': 22, 'ftp': 21}

b=service.pop('https')
print(b)
print(service)
#输出:报错KeyError: 'https'

(3)popitem:删除最后一个key-value值

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
a=service.popitem()
print(a)
print(service)
#输出  ('ftp', 21)
#      {'http': 80, 'ssh': 22}

(4)clear:清空字典内容,但是字典还在(空字典)

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
service.clear()
print(service)
#输出{}

<3>改:利用字典的key来修改一个元素;利用update来修改多个元素。

如果key值存在,则更新相应的value值

(1)修改一个元素

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
service['http']=8080
print(service)
#输出  {'http': 8080, 'ssh': 22, 'ftp': 21}

(2)修改多个元素

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
service_backup={'http':443,'oracal':888}
service.update(service_backup)
print(service)
#输出  {'http': 443, 'ssh': 22, 'ftp': 21, 'oracal': 888}

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
service.update(http=443,oracal=888)
print(service)
#输出  {'http': 443, 'ssh': 22, 'ftp': 21, 'oracal': 888}

<4>查(in,not  in),查看字典的key值,value值,查看字典的key值对应的value值及同时查看字典的key和value值

(1)not  in:不在,返回True;在,返回False——>成员操作符

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
print('http' not in service)
#输出False

(2)in:在,返回True;不在,返回False——>成员操作符

service={
    'http':80,
    'ssh':22,
    'ftp':21
}

print('http' in service)
#输出True

(3)查看字典的key值

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
print(service.keys())
#输出dict_keys(['http', 'ssh', 'ftp'])

(4)查看字典的value值

service={
    'http':80,
    'ssh':22,
    'ftp':21
}

print(service.values())
#输出dict_values([80, 22, 21])

(5)查看字典key对应的value值

方法一:

key不存在,报错

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
print(service['http'])
#输出80
print(service['https'])
#输出报错KeyError: 'https'

方法二:get方法

key存在,返回key对应的value值;

key不存在,默认返回None,有default,默认返回default。

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
print(service.get('http'))             #输出80
print(service.get('https'))           #输出None
print(service.get('https',1))        #输出1

(6)同时查看字典的key和value值

service={
    'http':80,
    'ssh':22,
    'ftp':21
}
for key,value in service.items():
    print(key,'----->',value)
#输出  http -----> 80
#          ssh - ----> 22
#          ftp -----> 21

五.Python下的字典练习

1.练习一:

数字重复统计:
    1)随机生成1000个整数;
    2)数字范围[20,100];
    3)升序输出所有不同的数字及其每个数字重复的次数

import random

#定义一个空字典
d={}

#定义一个空列表
l=[]

for i in range(1000):
    l.append(random.randint(20,100))
print(l)

#对生成的1000个数进行排序,并加到字典中
l1=sorted(l)
print(l1)
for j in l1:
    if j in d:
        d[j]+=1
    else:
        d[j]=1
print(d)

2.练习二:

重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.;
    # 1. 用户输入一句英文句子;
    # 2. 打印出每个单词及其重复的次数;
 "hello java hello python"
# hello 2
# java 1
# python 1

str=input('请输入一个英文句子:')

#定义一个字典
d={}

#分割字符串,得到一个列表
l=str.split()
for i in l:
    if i in d:
        d[i]+=1
    else:
        d[i]=1
print(d)

3.练习三:

 1. 随机生成100个卡号;
#     卡号以6102009开头, 后面3位依次是 (001, 002, 003,..., 100),
# 2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";

# 3. 输出卡号和密码信息, 格式如下:
卡号                  密码
6102009001              000000

import random
#定义一个空set集合
s=set()
#定义一个空字典
d={}
while True:
    num=random.randint(1,100)
    st=str(num)
    if len(st)==3:
        s.add('6101009'+st)
    elif len(st)==2:
        s.add('6101009'+'0'+st)
    elif len(st)==1:
        s.add('6101009'+'00'+st)
    if len(s)==100:
        break
print(sorted(s))
d={}.fromkeys(sorted(s),'redhat')
print('卡号\t\t\t密码')
for key,value in d.items():
    print('%s\t%s' %(key,value))

或:

import random
se=set([])
while True:
    if len(se) != 100:
        se.add('6102009'+str('%03d'%(random.randint(1,100))))
    else:
        break
print(len(se))
d={}.fromkeys(sorted(se),'redhat')
print('卡号\t密码')
for k,v in d.items():
    print(k,'\t',v)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值