#列表的其他操作
#排序
list1=["yuyu",1,2,'3',[4]] #列表会按照你存放顺序来进行保存
list2=[1,3,5,6,2,4] #同数据类型
list2.sort() #对列表进行升序操作
print(list2)
list2.sort(reverse=True) #对列表进行降序操作
print(list2)
#列表的嵌套
list1=[1,"yuyu",2,'3',[4,['a',5]]]
print(list1[4][1][1]) #5在第三层列表里
#注意区别
list1[1].upper()
print(list1[1])
list1[1]=list1[1].upper()
print(list1[1])
#列表的循环删除
#删除姓张的人
list1=["张三","李四","王五","张大","张二"]
list2=[] #临时列表,存储要删除的内容
for i in range(len(list1)):
item=list1[i]
if item.startswith('张'):
list2.append(item) #存储要删除的内容
for item in list2:
list1.remove(item)
print(list1)
[1, 2, 3, 4, 5, 6] [6, 5, 4, 3, 2, 1] 5 yuyu YUYU ['李四', '王五']
#元组tuple 不可变列表
#用于固定数据不允许外界修改
a=("yuyu") #若只有一个元素,a不是元组,是字符串
print(type(a))
a=("yuyu",)
print(type(a)) #末尾添‘,’,是元组
#与列表类似
a_tuple=("yuyu",'so','cute')
print(a_tuple[:])
print(a_tuple[0])
#元组不可变,但元组中的列表能变
t=(1,2,3,['yuyu','socute'])
t[3][0]='YUYU'
print(t)
<class 'str'> <class 'tuple'> ('yuyu', 'so', 'cute') yuyu (1, 2, 3, ['YUYU', 'socute'])
#set集合
s={} #空{}是字典类型
print(type(s))
s={1,'yuyu',2,3,'socute',4} #不同数据类型存储时,会归类
print(type(s))
print(s)
#不可哈希:python中的set集合进行数据存储的时候,需要对数据进行哈希计算,根据计算出来的哈希值进行存储数据
#set要求数据必须可哈希,即不可变的数据类型:int,str,tuple,bool
#不可哈希的数据类型,即可变的数据类型:list,dict,set
s=set() #空集合
print(type(s))
s.add('yuyu') #添加
s.add('so')
s.add('cute')
print(s)
s.pop() #删除第一个,但由于集合无序,效果上任意弹出,不推荐使用
print(s)
s.remove('yuyu') #指定删除
print(s)
#修改,先删除再添加
s.remove('so')
s.add('yuyu')
print(s)
#交集,并集,差集
s1={1,2,3}
s2={3,4,5}
print(s1&s2)
print(s1.intersection(s2))
print(s1|s2)
print(s1.union(s2))
print(s1-s2)
print(s1.difference(s2))
#集合可以去除重复
a_set={1,2,3,4}
a_set.add(1)
print(a_set) #因为已经有1,不会再加入
b_list=[1,2,3,4,1,2,3]
print(list(set(b_list))) #去除重复之后的数据是无序的
<class 'dict'> <class 'set'> {1, 2, 3, 4, 'yuyu', 'socute'} <class 'set'> {'cute', 'yuyu', 'so'} {'yuyu', 'so'} {'so'} {'yuyu'} {3} {3} {1, 2, 3, 4, 5} {1, 2, 3, 4, 5} {1, 2} {1, 2} {1, 2, 3, 4} [1, 2, 3, 4]
#字典 键值对形式进行数据存储
#字典的表示方式:{key1:value,key2:value,key3:value}
a_dict={1:'yuyu',2:'so',3:[1,2]}
print(a_dict[1])
print(a_dict[1][0])
#字典的key必须是可哈希的数据类型,value可以是任何数据类型
#可哈希(不可变):int,str,tuple,bool
yuyu y
#字典的增删改查
#增
b_dict={}
b_dict[1]='yuyu'
print(b_dict)
b_dict.setdefault(2,'so') #设置默认值,原字典中有2(key)时不起作用
print(b_dict)
b_dict.setdefault(2,'lala')
print(b_dict)
#改
b_dict[2]='cute'
print(b_dict)
#删
b_dict.pop(1)
print(b_dict)
b_dict[1]='yuyu'
del b_dict[1] #不推荐使用
print(b_dict)
#查
print(b_dict[2]) #dict[key],如果key不存在,程序报错。当key确定时,推荐使用
print(b_dict.get(2)) #如果key不存在,程序返回None,不报错
#eg.
dic={
'name':'yuyu',
'age':24,
'sex':'malefish'
}
user=input("请输入你想知道的个人信息;")
val=dic.get(user)
if val==None:
print('该信息不存在')
else:
print(val)
{1: 'yuyu'} {1: 'yuyu', 2: 'so'} {1: 'yuyu', 2: 'so'} {1: 'yuyu', 2: 'cute'} {2: 'cute'} {2: 'cute'} cute cute 请输入你想知道的个人信息;name yuyu
#None
print(type(None)) #默认为空,表示没有的意思
<class 'NoneType'>
#字典的操作 循环
dic={
'name':'yuyu',
'age':24,
'sex':'malefish'
}
#1,可以用for循环得到key和value
for key in dic:
print(key,dic[key])
#2,所有的key保存在一个列表中
print(list(dic.keys()))
#3,所有的value都放在一个列表中
print(list(dic.values()))
#4.直接拿到字典中的key和value
print(list(dic.items()))
for item in dic.items():
print(item)
print(item[0],item[1]) #item是元组,可以执行元组的相关操作
key,value=item
print(key,value) #元组的解构操作
print(type(item))
#进一步简化
for key,value in dic.items():
print(key,value)
name yuyu age 24 sex malefish ['name', 'age', 'sex'] ['yuyu', 24, 'malefish'] [('name', 'yuyu'), ('age', 24), ('sex', 'malefish')] ('name', 'yuyu') name yuyu name yuyu ('age', 24) age 24 age 24 ('sex', 'malefish') sex malefish sex malefish <class 'tuple'> name yuyu age 24 sex malefish
#解构 列表和元组都可以执行解构操作(也叫解包)
a,b=1,2 #必须得一一对应
print(a,b)
a,b=(1,2)
print(a,b)
a,b=[1,2]
print(a,b)
1 2 1 2 1 2
#字典的操作 嵌套
sk={
1:{
'name':'qy',
'age':{
'false':24,
'true':'uncountable'
},
'sex':'malefish',
'career':{
'1':'海神',
'2':'刺客',
'3':'画家'
}
},
2:'ls',
3:'sxh',
4:'qc'
}
#查
print(sk[1]['career']['1'])
#改
sk[1]['age']['false']+=1
print(sk[1]['age']['false'])
#删
sk[1].pop('sex')
print(sk[1])
sk[1]['age'].pop('true')
print(sk[1]['age'])
海神 25 {'name': 'qy', 'age': {'false': 25, 'true': 'uncountable'}, 'career': {'1': '海神', '2': '刺客', '3': '画家'}} {'false': 25}
#关于字典的循环删除
a_dict={
'数学':{
1:'高数',
2:'离散数学',
3:'线性代数',
4:'概率论'
},
'计算机':{
'a':'数据结构',
'b':'jsj网络',
'c':'jsj基本原理',
},
'大学物理':'上下',
'大学英语':'新视野'
}
temp=[]
for key in a_dict:
if key.startswith('大'):
temp.append(key)
for i in temp:
a_dict.pop(i)
print(a_dict)
#记录下key值,定向删除,位置移动不影响
'''
注意,循环删除不能直接:
for key in a_dict:
if key.startswith=='大':
a_dict.pop(key)
删除会引起元素位置前移,但内部指针不跟随移动而略过部分元素
'''
{'数学': {1: '高数', 2: '离散数学', 3: '线性代数', 4: '概率论'}, '计算机': {'a': '数据结构', 'b': 'jsj网络', 'c': 'jsj基本原理'}}
'''
编码:
1,ascii:包含26个英文字母在内的128种字符
恒定1byte
2,gbk:中国国标扩展编码,包含ascii中所有字符+大部分常用中文字符
恒定2byte
3,unicode:万国码,包含ascii中所有字符+中文+日文+韩文+...(只是一个标准,实际不运用)
恒定4byte('a'在ascii中只占用1byte,但在unicode中占用4byte,太浪费空间)
4,utf:是可变长度的unicode,既是万国码,还节省了空间
eg.utf-8中:
英文1byte
中文3byte
欧洲文字2byte
...
'''
a='祁煜'
print(a.encode('gbk')) #编码
#1个\x=1byte
print(a.encode('utf-8'))
#如何把gbk变成utf-8
b=b'\xc6\xee\xec\xcf'
b=b.decode('gbk') #解码
print(b)
print(b.encode('utf-8'))
b'\xc6\xee\xec\xcf' b'\xe7\xa5\x81\xe7\x85\x9c' 祁煜 b'\xe7\xa5\x81\xe7\x85\x9c'
#运算符
'''
1.算术运算:+ - * / %
2.比较运算:> < <= >= == !=
3.赋值运算:= += -=...
4.逻辑运算:and并且 or或者 not非
当同时出现时最好加上括号,避免产生歧义
优先级:()>not>and>or
5.成员运算:in ,not in
'''
print(2**2) #次方
print(3/2) #除
print(3//2) #整除
print(3%2) #余
#互换操作
a=1
b=2
a,b=b,a
print(a,b)
#或备份实现互换
t=a
a=b
b=t
print(a,b)
print(not True)
a='123'
print('1' in a)
4 1.5 1 1 2 1 1 2 False True
#文件操作
'''
1,找到文件并打开
open(文件路径,mode="",encoding="")
文件路径:
1,绝对路径 属性中位置+文本文档名字
2,相对路径 相对于当前程序所在文件夹的位置
'''
#绝对路径
#需要事先在电脑上创建txt,我是将祁煜.txt和当前程序一起放在C:/Users/肚皮皮/Desktop中,而yuyu.txt和Desktop一起放在肚皮皮中
file=open("C:/Users/肚皮皮/Desktop/祁煜.txt",'r',encoding='UTF-8') #不能用反斜杠\,只能用正斜杠/
print(file)
print(file.read(17)) #共7+1(换行符)+9=11个字符,()内为期望输出的字符数,可写可不写
#print(file.readlines()) #以列表形式输出所有字符
#三种print不能同时出现,所以以上两种以注释形式展示
#print(file.readline()) #只输出一行字符
#print(file.readline()) #自动换行,输出下一行字符
#利用for循环遍历文本信息
#for line in file:
# print(line)
<_io.TextIOWrapper name='C:/Users/肚皮皮/Desktop/祁煜.txt' mode='r' encoding='UTF-8'> 今天天气真好! 晴空万里,风和日丽
(代码注释中有笔误7+1+9=17,不是11)
#相对路径
#需要明确知道当前程序文件及txt文件的位置
#若在一个文件夹里
#file=open('祁煜.txt',encoding='utf-8')
#print(file)
#print(file.read())
#在上一层文件夹里
file=open("../yuyu.txt",encoding='utf-8')
print(file)
print(file.read())
<_io.TextIOWrapper name='../yuyu.txt' mode='r' encoding='utf-8'> hello world! yuyu so cute!