某些运算符,可变基本数据类型/不可变基本数据类型, 自定义数据类型

运算符

  Python中比较特别的

   幂3² 表示为 3**2 

  商的整数部分 例如10//3 = 3

  还有诸如“%=” “**=” “//=”

   逻辑运算“且,或,非”  : “and”  “or”  “not”

  判断元素是否在列表或字典中:  "in"  "not in"   

  判断数据类型“is” “not is”   例如: type("aaaa")  is str  为 True

不可变基本数据类型 (不可变对象,创建对象时没有写类名,例如a=1,b="hello")

int

  Python3 里面不论多大的数都是 int型      Python2 里面int存超了自动转为long

float

  float是不可变对象

字符串

  常用的方法,一些蛋疼的方法就不说了,翻翻笔记

name = "al\tEx li"

print(name.count("l"))   # 统计'l'的个数**************************************
print(name.center(50, "-"))  # 把name放在50个“-”中间******************************
print(name.find("l"))  # 找出第一个l的位置**************************************
print(name.rfind("l"))  # 找出最后一个l的位置***********************************
print(name[name.find("l"):])  # 字符串切片****************************************
print(name.isdigit())  #  判断是否为整数******************************************
print("+".join(['1', '2', '3']))  # 用+号将列表内的元素连接成一个字符串****************
print("1+2+3".split("+"))    #  按+号将字符串分割成一个列表**************************
print(name.strip())         # 去掉两边空格及换行符*******************************
print(name.lstrip())        # 去掉左边空格及换行符*******************************
print(name.rstrip())        # 去掉右边空格及换行符*******************************
print(name.splitlines())    #  按换行来分割字符串变成列表类型,Windows跟Linux换行符不一样可以用一用

 字符串截取:

name1 = ["a","b","c","d","e","f","g","h"] #列表等也可以同样的方法截取
name = "abcdefgh"
print(name[1:3]) #取出bc 顾首不顾尾 print(name[:3])# 省略0 取出前三个 abc print(name[-3:-1]) #从右往左取出fg print(name[-3:]) #省略0 取出后三个 fgh print(name[0:-1:2]) #隔两个取一个 0开头 -1结尾 2步长 aceg print(name[::3]) #从头到尾按步长3取出 adf

 

布尔值

  True / False

bytes

Bytes 对象是由单个字节(8位,取值范围 0-255)作为基本元素组成的序列。例如:一个汉字用UTF8编码为3个bytes,两个汉字就是6个bytes。

# 可以对bytes进行切片因为8位是基本单位:
a = ''
b = bytes(a, 'utf-8')
print(b[:1])

# 输出:b'\xe5'

bytes对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。

ASCII 字符串,可以直接使用 b'xxxx' 赋值创建 bytes 实例,非 ASCII 编码的字符则不能通过b'xxxx'这种方式创建 bytes 实例

a = ''
b = bytes(a, 'utf-8')
c = bytes(a, 'gb2312')
d = b'http://www.ku.ac.cn'
print(b)
print(c)
print(d)
#用utf-8解码bytes,如果用b.decode('gbk')会报错:
print(b.decode('utf-8'))

# 输出:
# b = b'\xe5\xbe\x90'
# c = b'\xd0\xec'
# d = b'http://www.ku.ac.cn'
#  

  

  Python3中,默认是Unicode编码utf8解码。

s = "你好"     #默认Unicode编码,utf-8解码

s_to_unicode=?????   #无法实现,因为已经是Unicode

s_to_gbk = s.encode("GBK")   #从Unicode直接变成gbk, bytes类型

s_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")   # 或者  s_to_utf8 = s.encode("utf-8")

 

  Python2中,是操作系统默认编码(不写#-*- encoding:utf-8 -*-的话)

s="你好"     # 默认操作系统编码gbk

s_to_unicode = s.decode("GBK")          # 转成Unicode

s_to_utf8 = s.decode("GBK").encode("utf8")      # 先转成Unicode才能转成utf8

 

元祖

  names = ("a" , "b" , "c")

  只能读,不能删元素,修改,增加。 如果有一些数据希望程序启动后不能被修改,可以用元祖存放。

可变基本数据类型 (可变对象,创建对象时也没有写类名,例如a=[1,2],b={1:'a',2:'b'})

列表

  names = ["a" , "b" , "c",“d”,“e”,“f”,“g”,“h”] 

  切片:

name = ["a","b","c","d","e","f","g","h"]
print(name[1:3]) #取出b c 顾首不顾尾
print(name[:3])# 省略0 取出前三个 a b c
print(name[-3:-1]) #从右往左取出f g
print(name[-3:])  #省略0 取出后三个 f g h
print(name[0:-1:2]) #隔两个取一个 0开头 -1结尾  2步长
print(name[::3])  #从头到尾按步长3取出

  追加: names. append ("g")

  插入:names . insert(1,"ccc") 在1的位置插入ccc

  删除: del  names[1]  或者 names.pop(1)

  找元素位置: names.index("b")

  找元素个数:names .count("d")

  列表反转顺序: names.reverse()  这个有什么卵用吗???

  排序:  names.sort()

  合并: names.extend(names1)

  复制:  列表里包含列表。 注意有浅复制和深复制。

    浅复制,name.copy() 复制列表内元素列表的指针,所以一改俱改。

    深复制,import copy    names2 = copy.deepcopy(name) 完全复制,改源列表元素不会影响复制后的列表

 

 

字典

  用列表中包括列表,不能根据元素列表的某个值找到该元素列表的下标,可以用字典来解决。

  key为字符串,value为任意类型

  定义: info = {"key1":value1 , "key2":value2 , “key3”:value3 }

  增: info["key4"] = value4

  删: del info["key4"]  或 info.pop("key4")

  改: info["key4"] = values

  查: info["key1"]  确定有key1才用    

     info.get("key1") 有就返回value1没有返回none

  其他方法:  info.values() ,返回所有的values

        info.keys()  返回所有keys

        info.setdefault(“key”,value)  添加一个新值,返回value,key重复则不修改旧值,返回旧value

        info. update(b) 把b字典合并到info里面,如果有key重复的更新value,不重复的合并

        info.items()把字典转换成列表,key为第一个元素

        dict.formkeys([6,7,8] , "test")

          相当于{ 8:'test" , 6:"test" , 7:"test"} 3个key共享一个内存地址,如果“test”为列表或字典的话,也是一改俱改

 

 

集合

  • 初始化

      list = [ 1, 2,3,4,5 ]

      set1 = set ( list )

  • 集合的逻辑关系

        

    求交集: set3 = set1.intersection(set2)  或者  set3 = set1 & set2

    求并集:set1.union(set2)  或者 set1 | set2

    求差集:set6 = set1.difference(set2)  或者  set6 = set1 - set2

        set5 = set2.difference(set1) 或者   set5 = set2 - set1

    求对称差集: set5 + set6 = set1.symmetric_difference(set2)   或者  set5+set6 = set1 ^ set2

    判断a是不是b的子集:a.issubset(b)   或者是判断b是不是a的父集, b.issuperset(a)

    判断ab是否有交集: a.isdisjoint(b)  无交集返回TRUE 有交集返回FALSE

  • 集合的方法

    长度:len(set)   ,  判断元素是否在set里:x in set , 浅复制:set.copy()

    增:set.add("aaaa")

      set.update( [1,2,3,4,5] )

    删:set.remove("aaa")  没有aaa报错  ,    set.discard("aaa")   没有aaa返回none

    很神奇 ,  没有改和查。。看来是不能直接在集合里改和查

自定义数据类型

posted @ 2017-07-08 18:38  _revolution  阅读(334)  评论(0编辑  收藏  举报