tuple,list,dict,set用法
复杂数据类型(数据结构)
tuple:元组,使用小括号表示,包含若干个数据元素,可以为空,数据元素的类型可以为任意类型,它是不可变对象(创建后不可改变,不能增删改除)
list:列表,使用中括号表示,包含若干个数据元素,可以为空,数据元素的类型可以为任意类型,它是可变对象,查询和插入效率很低,并且列表越长,查询和插入速度越慢,消耗内存空间小
dict:字典,使用花括号表示,包含若干个键值对(Key-Value Pair,也称为-值对)数据,Key不能重复并且必须为不可变对象,具有极快的查询和插入速度,但会消耗大量内存空间,并且会随着长度增加而增加
set:集合,使用花括号表示,和dict类似,只是不存放key,只存放value,无序且不重复
NoneType:空类型,该类型只有一个值 None
哲学
时间和空间,相生相克
切片操作(Slice Operation)
获取str,bytes,tuple,list中的部分数据元素
可变对象
int,float,bool,str,bytes,tuple都是不可变对象,而list,dict,set等是可变对象
常用内置函数
min:求最小值
max:求最大值
扩展
1.python不存在字符类型 ,都是字符串
字符可以理解为是含有一个字符的字符串
2.对变量赋值只是改变了它的指向
msg = "abcdef"#msg[2] = "d"msg = "sadfvfd"msg = (1, 2, 3)
3.遍历 将每个数据都访问一次,不重复
4.vim注释多行
ctrl + v 进入可视模式,上下移动选中想要注释的行,然后按大写的 I 键进入插入模式,输入#按esc退出即可
list的用法
#!/usr/bin/env python3
#-- coding: utf-8 --
s = 'dasfgdvsdgfgfa'
for j in s:
print(j,type(j))
list1 = [1, 2, 3, 4, 5, 'a', 'b', 'c', '小花', True]
for i in list1:
print(i,type(i)) # 常用
a = list1[-1]
print(a)
list1[3] = '小乔' # 列表赋值 注:与字符串类似,如果原有的列表被修改,就相当于一个新的列表
print(list1) # 赋值的时候,是给原有的列表赋值
b = list1[1:3] # 切片 范围取值
print(b)
c = list1[::2] # 步长
print(c)
list2 = [1, 2, 3, [4, 5, 6], [7, 8, 9]]
d = list23
print(d) #二维列表取值
使用range创建一个列表 **
list3 = list(range(1,20,2))
list4 = list(range(20,1,-2))
print(list3)
print(list4)
########ID
str1 = 'abc'
print(str1, id(str1))
str1 += 'def'
print(str1, id(str1))
list5 = [1, 2, 3, 4, 5]
print(list5, id(list5))
list5[3] = 666
print(list5, id(list5))
list6 = list5 + [9, 8, 7]
list7 = list5print(list6, id(list6))
print(list7, id(list7))
list8 = list5 * 3
print(list8, id(list8))
list9 = []
list9.append('111') # 列表添加元素
print(list9)
list10 = [1, 2, 3, 4, 3, 3, 3,'delete', 'remove', 'pop']
list10.remove(3) # 删除指定元素
print(list10)
list10.pop() # 通过索引删除
print(list10) # 默认删除最后一个
####修改##反转
list10.reverse() #反转,将第一位元素与最后一位元素互换位置,第二位与倒数第二位互换依次类推
print(list10)
#####其他
list12 = [1, 2, 3, 4, 5]
L = len(list12)
print(L)
L2 = max(list12)
L3 = min(list12)
print(L2)
print(L3)
#list12.clear() # 清空列表
print(list12)
list12.insert(3, 666)
print(list12) #插入一个数据
list12.extend([6, 7, 8]) # 在列表末尾一次性追加多个值
print(list12)
#####查找
print(list12.index(2)) # 找元素所在的小标
print(list12.count(2)) #查找元素出现的次数
#####排序
list12.sort() # 列表升序
print(list12)
list12.reverse() # 列表降序
print(list12)
L = [1, 3, 5, 7, 4]
a = sorted(L, reverse = False)
b = sorted(L, reverse = True)
print(a)
print(b)
'''sort 与 sorted 的区别:
sort 修改原始列表sorted 新建一个列表
'''
tuple元组的用法
###########tuple#特性:不可改变
#开始定义成的样子就一直是什么样子
t = (1, 2, 3, 4, 5)
print(t, type(t))
t2 = (1,) #如果只有一个元素,只需末尾添加一个逗号
print(t2, type(t2))
#用range 创建一个元组
t3 = tuple(range(2,30))
print(t3)
for i in t:
print(i)
print(max(t3), min(t3), len(t3))
print(t3.index(4))
print(t3.count(5))
#####元组与列表相互转换,即想改变元组,可以把元组转换为list,改变后再转换回来
L = list(t3)
print(L, type(L))
t4 = tuple(L)
print(t4, type(t4))
#####排序
t5 = (1, 4, 7, 3, 2, 5, 6)
s1 = tuple(sorted(t5, reverse = True))
s2 = tuple(sorted(t5))
print(s1)
print(s2)
#元组不可变,但元组里存放的列表里的元素是可以改变的,不受元组本身的影响
t6 = (1, 2, 3, 4, 5, [1, 2, 3], [4 ,5, 6])
#a = t6[5]
#print(a, type(a))
t65 = 666
print(t6)
dict字典的用法
######dict:字典,通过key-value(键-值)匹配数据的存在,完全不考虑位置#key:查询所需要的关键字,在同一个字典中不允许重复,key一般来说都是使用字符串
d = {'A': 11, 'B': 22, 3: 33, 4: 44}
print(d,type(d))
d1 = d['B'] # 字典取值
d2 = d[3] #使用列表取值[ 这是放的是key ]
print(d1)
print(d2)
d2 = d.get('f') # 多用此方法取值
print(d2)
#使用列表取值,如果key没有,就会报错#使用get() 方法取值,如果 key没有 ,返回None
#赋值
d['B'] = 1111
print(d)
#删除
#d3 = d.pop('A')
#print(d)
#for 循环
for i in d:
print(i)
print(d[i])
for k,v in d.items():
print(k,v)
set集合的用法
#####set 无序的集合,没有重复的元素,可变的容器
tmp = {1, 2, 3, 'good', 3}
print(tmp, type(tmp))
#增tmp.add('love') # 如果容器中的元素已经存在,不能添加进去
print(tmp)
#改tmp.update([4, 5, 6, 'blue']) # 可以将容器中的元素放到集合中,去掉重复的元素,然后将它转换回来
print(tmp)
#删
tmp.remove('blue')
print(tmp)
#清空
#tmp.clear()
#print(tmp)
#集合和列表的转换
L = list(tmp)
print(L)
#去 重
LL = [1, 1, 1, 2, 2, 2, 3, 3, 4, 5]
set1 = set(LL)
print(set1)
sss1 = {1, 2, 3, 5, 8, 9}
sss2 = {2, 3, 4, 5, 6, 9}
print(sss1 & sss2)#与
print(sss1 | sss2) #或
print(sss1 ^ sss2) # 非
作业
1.重点掌握list,dict,set的增删改差操作
2.实现一个用于我们班的随机抽奖程序