zoukankan      html  css  js  c++  java
  • python的数据类型

    个人觉得一个编程语言的主要内容可以分为数据类型,程序控制流,函数,面向对象这几块。

    python的数据类型相对来说更接近PHP,毕竟都是解释型语言,而且变量都采用了弱类型这种形式。相对来说python的更有特色,在变量声明的时候和PHP相似,不用考虑变量类型,但和PHP是用一个包含多类型的容器去实现弱类型不同,python是采用了类似java的包装类的技术,对所有基础类都实现了相应的包装类,声明变量的时候直接按照需要的确切类型使用对应的包装类,至少表面如此,至于底层实现就不清楚了。

    常用的基础类型几乎和PHP一致,就不细说了,需要注意的是python的4个容器,list,tuple,dict,set

    list可以理解为C++的数组,或者java的容器,当然使用的时候其实更像是php的无key数组,弱类型的语言便利性在这点上无法否认。

    tuple相当于常量数组,也就是内容只读的list

    dict也叫字典,对应php中的键值对数组和java中的map容器,需要注意的是key具有唯一性

    set是一种去重集合,只有value没有key

    对于变量的基本操作和认识,用以下代码来说明

    a="111"
    b=111
    print(type(a))#type可以用于类型检测
    print(type(b))
    print(id(a))#id用于显示变量地址
    print(id(b))
    b=a
    print(id(a))
    print(id(b))#a和b指向同一个地址,可以看出应该是类似于java字符常量池的机制,在节省内存
    a="222"
    print(a)
    print(b)#b并没有跟着a改变,从这里可以看出并非引用传递,这说明python的变量1地址只表示存储的值的实际地址,并非变量申请的存储空间
    c=[1,2,3]
    d=c
    print(id(c))
    print(id(d))
    c[0]=3
    print(c)
    print(d)#d跟着改变,可以看出这里是浅拷贝
    

     对list的常见操作见下面的代码

    #声明
    a=[0,1,2,3,4,5]
    #切片,也就是定位element
    print(a[1])
    print(a[2:5])#不包括index是5的element
    b=[0,1,[0,1,2,["here"]]]
    print(b[2][3][0])#可以进行级连操作
    #一些常用操作
    print(len(b))#len为关键字,不能进行b.len()之类的操作
    #print(','.join(a))#报错,只有字符串list才能被join
    a=["0","1","2","3"]
    print(",".join(a))
    #list支持像java中的list容器那样的常见操作
    #追加一个元素
    a.append("4")
    print(a)
    #插入
    a.insert(1,"5")
    print(a)
    #删除
    a.pop(1)
    print(a)
    #获取索引
    print(a.index("3"))
    #排序
    c=[2,3,6,1,8,4,2]
    c.sort()
    print(c)
    #合并
    d=[2,3,"a","b","c"]
    c.extend(d)
    print(c)
    

    tuple的使用相对简单,dict的具体使用注意事项和常规操作可以见代码

    a=1
    b="2"
    c=3
    #d={a:"1",b:"2","3":c,[1,2]:"d"}#字典类型的key必须是基础类型
    d={a:"1",b:"2","3":c}
    print(d)
    print(d["2"])
    print(d[1])
    #print(d[5])溢出错误
    print(d.get(5,"d don't has this key"))#get比直接使用[key]的方式取值更安全
    #获取keys
    print(type(d.keys()))#直接调用keys获取到的是一种叫dict_keys的特殊数据类型,需要用list转化为list类型
    print(list(d.keys()))
    #获取values
    print(list(d.values()))#与获取keys类似,同样需要使用list转化
    #赋值,方式和php极为相似
    d["new"]="new element"
    print(d)
    #判断
    #如果d中没有value为last的element,新加一个
    if not("last" in d):
        d["last"]="last element"
    print(d)
    #删除对应key的element
    d.pop("last")
    print(d)
    #dict合并,实质是用后一个dict对前一个进行更新/覆盖(以key为准进行操作)
    d.update({"new":"new new element","last":"new last element"})
    print(d)
    #删除,python中del是一个关键字,并不能使用d.del("last")这种方式
    del d["last"]
    print(d)
    #清空
    d.clear()
    print(d)
    #拷贝,也就是进行深拷贝
    a={"1":"1","2":[1,2,3],"3":{"1":(1,2),"2":[3,4,5]}}
    b=a.copy();
    print(a)
    print(b)
    print(id(a))
    print(id(b))
    

     需要特别说明的是list,tuple,dict,set这四种类型赋值时候都是浅拷贝,也就是引用赋值,和int,str等基础类型不同

    set的使用见代码

    print(type(set({})))#set类型
    set({1,2,"3"})
    #set({1,[]})#set的element只能为基础数据类型
    print(set({1,1}))#set的本质是去重容器,声明时候可以是重复的,但最终结果是去重的
    #set的常见操作
    a=set({1,2,"a","b"})
    print(len(a))
    #添加元素
    a.add("b")
    a.add("c")
    print(a)#从顺序上可以看出是乱序的,set的本质是一个无序去重集合
    #移除元素
    #a.remove("e")#移除不存在的元素会报错
    a.remove("b")
    print(a)
    #集合运算
    a=set({1,2,3})
    b=set({3,4,5})
    print(a&b)#求交集
    print(a^b)#求差集,就是并集减去交集
    print(a|b)#求并集
    a=set({1,2})
    b=set({1,2,3})
    c=set({1,2})
    #判断一个集合是否是另一个集合的子集
    print(a<=b)
    print(a<=c)
    #判断一个集合是否另一个集合的真子集
    print(a<b)
    print(a<c)#c和a的元素一致,没有其它非a元素,所以不是真子集
    

     关于数据的其它讨论

    a=True#python中的bool值首字母要大写
    print(type(a))#bool类型
    a=None
    print(type(a))#NoneType类型,相当于NULL
    #python中没有const的变量,只是一般会用大写命名类似的变量
    PI = 3.14 # 常量
    #python中所有基础数据类型还有扩展类型,比如list,dict,set本质都是对象,类似于java的包装类
    str() # 字符串对象
    int() # 整型对象
    float() # 浮点型对象
    list() # 列表对象
    tuple() # 元组对象
    dict() # 字典对象
    set() # 字典对象
    bool() # 布尔对象
    #这些包装类可以用于声明相对应的变量,也可以用于变量转换,相当于java的包装和解包装
    print(str(1))
    print(int("1"))
    print(list(tuple(set({1,2,3}))))
    
    本篇文章首发自魔芋红茶的博客https://www.cnblogs.com/Moon-Face/ 请尊重其他人的劳动成功,转载请注明。
  • 相关阅读:
    luogu P2661 信息传递 强连通分量求最小环
    luogu P1346 电车 最短路
    luogu P1113 杂务
    luogu P1111 修复公路 最小生成树prim
    python提交要注意的几个地方
    【图论】拓扑排序
    算法竞赛入门经典 第六章
    实用函数
    Markdown数学公式语法
    Codeforces Round #627 (Div. 3) 补题
  • 原文地址:https://www.cnblogs.com/Moon-Face/p/14443963.html
Copyright © 2011-2022 走看看