博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习之路_day_05(元组、字典、集合类型及字符编码)
阅读量:5114 次
发布时间:2019-06-13

本文共 6431 字,大约阅读时间需要 21 分钟。

一:基本使用:tuple
1 用途:记录多个值,当多个值没有改的需求,此时用元组更合适

2 定义方式:在()内用逗号分隔开多个任意类型的值
t=(1,1.3,'xx',('a','b'),[1,2]) #t=tuple((1,1.3,'xx',('a','b'),[1,2]))
print(t,type(t))
t1=tuple('hello')
print(t1)

3 常用操作+内置的方法
优先掌握的操作:
1、按索引取值(正向取+反向取):只能取
t=('egon',123,['a','b'])
print(id(t[0]))
print(id(t[1]))
print(id(t[2]))

t[2][0]='A'
print('='*50)
print(id(t[0]))
print(id(t[1]))
print(id(t[2]))
t[0]='EGON'

t[2]='xxxx'
t[2][0]='A'
print(t)

2、切片(顾头不顾尾,步长)
t=(1,2,3,4,5)
print(t[0:3])
print(t)
3、长度

4、成员运算in和not in

5、循环
for item in ('a','b','c'):
    print(item)

需要掌握的操作
t=('a','b','c','a')
print(t.count('a'))
print(t.index('a',1,10))
print(t.index('xxx',1,10))

该类型总结
1 存多个值

2 有序

3 不可变

补充:
不可变类型=》可hash类型
可变类型 =》不可以hash类型
二:基本使用dict
1 用途:记录多个值,每一个值都对应的key用来描述value的作用

2 定义方式:在{}内用逗号分隔开多 个key:value,其中value可以是任意类型,而key必须是不可变的类型,通常情况下应该str类型
dic={0:'aaa',1:'bbb',2:'cccc'} #dic=dict({0:'aaa',1:'bbb',2:'cccc'})
print(dic,type(dic))
print(dic[0])

dic={[1,2]:'aaa'}
dic={(1,2):'aaa'}
print(dic[(1,2)])

用法一:
dic=dict(x=1,y=2,z=3)
print(dic)

用法二:
userinfo=[
    ['name','egon'],
    ['age',18],
    ['sex','male']
]
d={}
for k,v in userinfo: #k,v=['name', 'egon']
    # print(k,v)
    d[k]=v
print(d)

d=dict(userinfo)
print(d)

3 常用操作+内置的方法
优先掌握的操作:
1、按key存取值:可存可取
dic={'name':'egon'}
print(dic['name'])
dic['name']='EGON'
print(dic)
dic['age']=18
print(dic)

l=['a','b']
l[0]='A'
l[2]='c'

2、长度len
dic={'name':'egon','age':18,'name':'EGON','name':'XXXX'}
print(dic)
print(len(dic))

3、成员运算in和not in:字典的成员运算判断的是key
dic={'name':'egon','age':18,}
print(18 in dic)
print('age' in dic)

4、删除
dic={'name':'egon','age':18,}
通用
del dic['name']
print(dic)
del dic['xxx'] ##key不存在则报错

res=dic.pop('age') #删除key对应的value,并返回value
print(dic)
print(res) #
dic.pop('xxx') #key不存在则报错

res=dic.popitem()
print(dic)
print(res)

5、键keys(),值values(),键值对items()
dic={'name':'egon','age':18,}
print(dic.keys())
l=[]
for k in dic.keys():
    l.append(k)
print(l)
print(list(dic.keys()))

print(dic.values())
print(list(dic.values()))
print(dic.items())
print(list(dic.items()))

6、循环
dic={'name':'egon','age':18,'sex':'male'}

for k in dic.keys():
    print(k,dic[k])

for k in dic:
    print(k,dic[k])

for v in dic.values():
    print(v)

for k,v in dic.items():
    print(k,v)

8 dic.get()
dic={'name':'egon','age':18,'sex':'male'}
dic['xxx']
v=dic.get('name')
print(v)

v=dic.get('xxx')
print(v)

需要掌握的操作

dic.fromkeys()的用法:
l=['name','age','sex']
dic={'name':None,'age':None,'sex':None}
dic={}
for k in l:
    dic[k]=None
print(dic)

dic=dic.fromkeys(l,None)
print(dic)

old_dic={'name':'egon','age':18,'sex':'male'}
new_dic={'name':'EGON','x':1,'y':2}
old_dic.update(new_dic)
print(old_dic)

setdefault:有则不动/返回原值,无则添加/返回新值
dic={'name':'egon','age':18}
res=dic.setdefault('name','EGON') # 字典中已经存在key则不修改,返回已经存在的key对应的value
print(dic)
print(res)

res=dic.setdefault('sex','male') # 字典不存在key则添加"sex":"male",返回新的value
print(dic)
print(res)

该类型总结
1 存多个值

2 无序

3 可变
dic={'x':1}
print(id(dic))
dic['x']=2
print(id(dic))

练习1:
nums=[11,22,33,44,55,66,77,88,99,90]
dic={
    'k1':[],
    'k2':[]
}
for num in nums:
    if num > 66:
        dic['k1'].append(num)
    else:
        dic['k2'].append(num)
print(dic)

练习2:
s='hello alex alex say hello sb sb'
words=s.split()
dic={}
# print(words)
for word in words:
    if word in dic:
        dic[word]+=1
    else:
        dic[word]=1

print(dic)

s='hello alex alex say hello sb sb'
words=s.split()
dic={}
for word in words: # word="hello"
    dic.setdefault(word,words.count(word)) #{'hello':2,"alex":2,"say":1,}
print(dic)

 

pythons=['李二丫','张金蛋','李银弹','赵铜蛋','张锡蛋','alex','oldboy']
linuxs=['lxx','egon','张金蛋','张锡蛋','alex','陈独秀']

l=[]
for stu in pythons:
    if stu in linuxs:
        l.append(stu)

print(l)

三:基本使用:set
1 用途: 关系运算,去重

2 定义方式: 在{}内用逗号分开个的多个值
集合的三大特性:
2.1 每一个值都必须是不可变类型
2.2 元素不能重复
2.3 集合内元素无序

s={1,3.1,'aa',(1,23),} # s=set({1,3.1,'aa',(1,23),})
print(s,type(s))

s={1,1,1,1,1,1,1,1,1,2,3}
print(s)

s={'a','b','c'}
s[0]

s=set('hello')
print(s)
print(set(['a','b','c',[1,2]]))

3 常用操作+内置的方法
pythons={'李二丫','张金蛋','李银弹','赵铜蛋','张锡蛋','alex','oldboy'}
linuxs={'lxx','egon','张金蛋','张锡蛋','alex','陈独秀'}
取及报名python课程又报名linux课程的学员:交集
print(pythons & linuxs)
print(pythons.intersection(linuxs))

取所有报名老男孩课程的学员:并集
print(pythons | linuxs)
print(pythons.union(linuxs))

取只报名python课程的学员: 差集
print(pythons - linuxs)
print(pythons.difference(linuxs))

取只报名linux课程的学员: 差集
print(linuxs - pythons)
print(linuxs.difference(pythons))

取没有同时报名两门课程的学员:对称差集
print(pythons ^ linuxs)
print(pythons.symmetric_difference(linuxs))

是否相等
s1={1,2,3}
s2={3,1,2}
print(s1 == s2)

父集:一个集合是包含另外一个集合
s1={1,2,3}
s2={1,2}
print(s1 >= s2)
print(s1.issuperset(s2))

s1={1,2,3}
s2={1,2,4}
print(s1 >= s2)

子集
s1={1,2,3}
s2={1,2}
print(s2 <= s1)
print(s2.issubset(s1))

需要掌握操作
s1={1,2,3}
s1.update({3,4,5})
print(s1)

s1={1,2,3}
res=s1.pop()
print(res)

s1={1,2,3}
res=s1.remove(3) #单纯的删除,返回值为None
print(s1)

s1={1,2,3}
s1.add(4)
print(s1)

s1={1,2,3}
s2={1,2}
s1.difference_update(s2) #s1=s1.difference(s2)
print(s1)

s1={1,2,3}
res=s1.discard(3) ##单纯的删除,返回值为None
print(s1)
print(res)
s1.remove(444444) #删除的元素不存在则报错
s1.discard(444444) #删除的元素不存在不会报错

s1={1,2,3}
s2={1,2,4}
print(s1.isdisjoint(s2)) #如果两个集合没有交集则返回True

s1={1,2,3}
s2={4,5,6}
print(s1.isdisjoint(s2)) #如果两个集合没有交集则返回True

该类型总结
1 存多个值

2 无序

3 set可变
s={1,2,3}
print(id(s))
s.add(4)
print(id(s))

集合去重
局限性
1、无法保证原数据类型的顺序
2、当某一个数据中包含的多个值全部为不可变的类型时才能用集合去重
names=['alex','egon','alex','alex','egon','lxx']
s=set(names)
print(s)
l=list(s)
print(l)

stus_info=[
    {'name':'egon','age':18},
    {'name':'alex','age':73},
    {'name':'oldboy','age':84},
    {'name': 'egon', 'age': 18},
    {'name': 'egon', 'age': 18},
    {'name': 'egon', 'age': 18},
    {'name': 'oldboy', 'age': 84},

]
# set(stus_info) # 报错
l=[]
for info in stus_info:
    if info not in l:
        l.append(info)

print(l)
stus_info=l
print(stus_info)

 

四、字符编码

一 储备知识点1
    运行程序的三大核心硬件
        cpu
        内存
        硬盘

    运行一个程序:
        代码由硬盘读入内存,cpu从内存中读取指令执行

    强调:程序运行过程中产生的数据一定是最先存放于内存中的

二 储备知识点2
    运行python程序的三个阶段:python test.py
        1、先启动python解释器
        2、将test.py的内容当作普通字符读入内存
        3、python解释器解释执行读入内存的代码,识别python的语法

        python解释器运行程序的前两个阶段跟文本编辑器一模一样
        只有第三个阶段不同

三 字符编码
    人操作计算机使用人类认识的字符,而计算机存放都是二进制数字
    所以人在往计算机里输入内容的时候,必然发生:
        人类的字符------(字符编码表)--------》数字

        ASCII: 用(8位bit二进制数)1Bytes对应一个英文字符
            8bit= 1Bytes
            1024Bytes=1KB
            1024KB=1MB
            1024MB=1GB
            1024GB=1TB
            1024TB=1PB

        GBK:用2Bytes对应一个中文字符,1Bytes对应一个英文字符

        unicode:用2Bytes对应一个字符
            必须满足两大特点:
                1、能够兼容万国字符
                2、与老字符编码都有一种数字与数字的对应关系
        a 1111 0111
        a 0000 0000 1111 0111

        utf-8:Unicode Transformation Format
            一个中文字符:3bytes
            一个英文字符:1bytes

        强调:
            unicode格式的数字--------encode编码---------》utf-8格式的数字
            unicode格式的数字《--------decode解码《---------utf-8格式的数字

转载于:https://www.cnblogs.com/zjh009/p/9469501.html

你可能感兴趣的文章
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>