列表:打了激素的数组
元组:带了紧箍咒的列表;不可变数据类型,没有增删改查;可以存储任意数据类型
定义元组
t1 = ()
t2 = tuple([])
t3 = (1, 2.1, 2e+10, True, 2j+3, [1,2,3],(1,2,3) )
print(type(t1), type(t2), type(t3),)
如果元组里面包含可变数据类型, 可以间接修改元组内容;
t1 = ([1,2,3], 4)
t1[0].append(4)
print(t1)
元组如果只有一个元素, 后面一定要加逗号, 否则数据类型不确定;
tuple = (1,1.0,True,'westos')
索引
print(tuple[0])
切片
print(tuple[::-1])
连接:
不同的数据类型可以连接麼(除了数值类型之外,不同的数据类型之间不可以连接)
print(tuple + (1,2,3))
重复
print(tuple * 5)
for循环
for i in tuple:
成员操作符
print(1 in tuple)
t = (1,2,'a','c','a')
# 查看元素的索引值
print(t.index('c'))
# 查看元素在元组中出现的次数
print(t.count('a'))
元组的排序
scores = (100,89,93,79,53,65)
#先将元组转换成列表
scoreli = list(scores)
scoreli.sort()
print(scoreli)
#sorted排序
score_sort = sorted(scores)
print(score_sort)
a=1
b=4 先把a,b封装成了一个元组;(1,4)
a,b=b,a 在把b,a=a,b ===> b,a=(1,4)
print(a,b) b=(1,4)[0] ; a=(1,4)[1]
t_ab=(a,b)
print(t_ab) 打印变量值
t_low=('westos',34,'man')
name,age,score=t_low 元组的赋值:有多少个元素,就用多少个变量接收
print(name,age,score)
浅拷贝:没有拷贝拷贝对象里面的元素的ip地址
深拷贝:不光拷贝了拷贝对象的ip地址,还拷贝了拷贝对象里面的元素的ip地址
浅拷贝的实现:
li.copy()
li[:]
copy.copy(li)
实现深拷贝:
copy.deepcopy(li
import copy
a=['koko',[34]]
print(a,id(a))
b=['ku',[45]]
print(b,id(b))
c=[a,b]
print(c,id(c))
浅拷贝: 拷贝结果的id与拷贝对象的id不同,但是拷贝对象里面元素的id没有发生改变
如果拷贝对象里面的元素的id被删除,那么拷贝结果与拷贝对象的那个元素都会被删除
d=copy.copy(c)
print(d,id(d))
print(d[0],id(d[0]))
print(d[1],id(d[1]))
a.remove('koko') #变点
print(c,d)
深拷贝 拷贝结果的id与拷贝对象的id不同,并且拷贝结果里面元素的id拷贝对象里面元素的id不同;
如果拷贝对象里面的元素的id被删除,那么拷贝结果的元素不会发生变化;但拷贝对象的那个元素会被删除
e=copy.deepcopy(c)
print(e,id(e))
print(e[0],id(e[0]))
print(e[1],id(e[1]))
b.remove('ku') #变点
print(c,e)
集和里面的元素是不可重复的
s = {1,2,3,4,5,6,6,3,3,2}
print(s,type(s))
如何定义一个空集和
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}
for i in s: for循环
print(i,end=' ') 输出不换行
print() 输出换行
for i,v in enumerate(s): 枚举
print('index: %s,value:%s' %(i,v))
应用:列表去重
li = [1,2,3,4,1,2,3]
print(list(set(li)))
集合:可变数据类型;添加顺序,和在集合中存储的顺序不同
s={2,3,5,7,8,9}
s.add(4) 添加一个元素
print(s)
s.update({1,11,12}) 添加一个集合,集合里面可以有多个元素
print(s)
s.pop() 删除最小的一个元素
print(s)
s.remove(3) 删除指定的一个元素
print(s)
s1={1,4,6,5}
s2={4,6,7,1,9}
print("交集:" ,s1.intersection(s2)) #交集
print("交集:" ,s1 & s2)
print("并集:" ,s1.union(s2)) #并集
print("并集:" ,s1 | s2)
print("差集:" ,s1.difference(s2)) #s1-(s1&s2)
print("差集:" ,s2.difference(s1)) #s2-(s2&s1)
print("差集:" ,s1-s2)
print("差集:" ,s2-s1)
s2.add(5)
print(s1.issubset(s2)) #s1是不是s2的子集
print(s1.issuperset(s2)) #s1是不是s2的超集(父集)
print(s1.isdisjoint(s2)) #s1和s2是不是不相交
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性
他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,对于其中重复的数字,
只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的学号,然后再把这些数从小到大排序,
按照排好的顺序去找同学做调查,请你协助明明完成“去重”与排序工作
di1 ={} 定义一个空字典
字典:key-value 键值对存储的一种数据结构
value值可以是任意数据类型:int;float;long;list;tuple;set;dict
fromkeys创建字典
fromkeys第一个参数可以是 list / tuple / str / set
将第一个参数的元素作为字典的key值,并且所有key的value值一致
d4 = {}.fromkeys({'1','2','3'},'a'))
print(d4)
工厂函数:
d5 = dict(a=1,b=2)
print(d5)
字典不支持<索引;切片;重复;连接>;
成员操作符(in):判断的是 某个值是否为字典的key
字典的for循环:默认遍历字典的key值
for key in di:
print(key,di[key])
di = {'v': 9}
di['s'] = 2 增加一个元素;如果key值存在,则更新;
print(di) 如果key不存在,则增加一个key-value值
di.update(a=2, b=3) 增加一个元素;如果key值存在,则更新;
print(di) 如果key不存在,则增加一个key-value值
di.setdefault('h', 5) 增加一个元素;如果key值存在,则不更新;
print(di) 如果key不存在,则增加一个key-value值
del di['a'] 删除指定的一个key-value值,如果key不存在,则报错
print(di)
item = di.pop('b') 删除指定的一个key-value值,如果key不存在,则报错
print(di)
item1 = di.popitem() 删除最后一个key-value值
print(di)
print(di.keys()) 查看字典里面的所有key值
print(di.values()) 查看字典里面的所有values值
for k, v in di.items(): 查看字典里面的所有key值和所有values值
print(k, "\t--->\t", v)
# 获取指定key对应的value值
print(di.get('s')) 如果key值存在,返回对应的value;
print(di.get('s','key not exist')) 如果key不存在,默认返回None,如果需要返回指定的值,传值即可
print(di['v']) 如果key值不存在,程序会报错
print({}.fromkeys({'1', '4'}, '123456'))
1.卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100),
2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
3. 输出卡号和密码信息, 格式如下:
卡号 密码
6102009001 000000
重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.;
1. 用户输入一句英文句子;
2. 打印出每个单词及其重复的次数;
1). 随机生成1000个整数;
2). 数字的范围[20, 100],
3). 升序输出所有不同的数字及其每个数字重复的次数;
id:在内存中存储的位置
type:变量的类型
value:变量的值
== :type,value
is:type,value,id
结论:
is 表示两个变量的值是否在同一块内存空间
== 表示的是值是否相等
总结: is 返回的值是True ==返回的一定是true