python学习笔记2(jupyter)

#列表的其他操作
#排序
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!

18be38084d684688a1baba65b0b8dd6f.png1db756a263b24e58954b7b0c2a366aa2.png30f75aa7175341098e27a66d9cf7dd03.png1de22bb3951741fc9d0569782d505222.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值