zoukankan      html  css  js  c++  java
  • 2 数据类型详解

    一  数据基本类型概况
    01 int 整形
    1,2,3 .... 用于计算,运算。
    常用方法
     i = 4

    print(i.bit_length())  ##打印的是二进制的长度

     02 str 字符串

    如:‘老男孩’,‘alex'.... 少量的数据的存储。
    #切片
     1 s = 'python自动化21期'
     2 # 切片
     3 #s[起始索引:结束索引+1:步长]
     4 # s1 = s[:6]
     5 # print (s1)
     6 #
     7 # s2 = s[6:9]
     8 # print (s2)
     9 
    10 # print(s[0:])  ##默认到最后
    11 #
    12 # print (s[:-1]) ##-1代表最后一个,但是不打印最后一个
    13 #
    14 # print (s[0:5:2]) ##每隔1个打印一次 2 就代表步长
    15 # print (s[5:0:-2])  ##反向加步长,倒着取值
    # * capitalize()首字母大写,其他字母小写
     1 # s = 'oldBoy' 
    2 #s1 = s.capitalize() 
    3 # print (s1) 
    # *** 全部大写upper() 全部小写lower()
    
     2 s2 = s.upper() 
    
    3 s3 = s.lower() 
    
    4 print (s2,s3) 
    #* 大小写反转 swapcase()
     1 s4 = s.swapcase() 
    2 print (s4) 
     1 #*非字母的元素隔开的每个单词首字母大写 title()
     2 
     3 ss = 'alex wusir*oldboy3taibia'
     4 s5 = ss.title()
     5 print (s5)
     6 
     7 # center 居中,长度自己设定,默认填充物None
     8 s6 = s.center(30,'*')
     9 print (s6)
    10 
    11 # *** startswith endswith 以什么开头,以什么结尾
    12 s7 = s.startswith('o')
    13 print (s7)  ##如果是真,则返回true
    14 
    15 s8 = s.endswith('y')
    16 print (s8)  ##同上
     1 # *** strip 去除首尾的空格,制表符	,换行符。不仅仅是去除空格....
     2 # rstrip 去除右边,lstrip 去除左边
     3 
     4 s = 'tyoyldBoyrte'
     5 #
     6 # print(s)
     7 # s8 = s.strip()
     8 # print(s8)
     9 # s81 = s.strip('t')
    10 # # print(s81)
    11 # s81 = s.strip('tey')  ##把字符串里面的tey给去掉了,从左往右依次执行
    12 # print(s81)
    13 
    14 #例子:
    15 # name = input('>>>').strip()  ##输入用户名的时候自动去除空格,可以防止用户输错
    16 # if name == 'oldboy':
    17 #     print('验证成功')
     1 #*** split  (str ---> list)
     2 
     3 # s1 = 'oldboy,wusir,alex'
     4 # b = 'oldboywusiroalex'
     5 # l = b.split()
     6 # print(l)
     7 # l = s1.split(',')  ##以逗号为分隔符,让s1变成了列表
     8 # print(l)
     9 # l2 = b.split('o')  # ['', 'ldb', 'ywusir', 'alex']b
    10 # print(l2)
    11 #
    12 # l3 = b.split('o',1)  # ['', 'ldboywusiroalex']
    13 # print(l3)
    14 
    15 
    16 #join 将list --->str
    17 sa = 'oldBoy'
    18 s9 = '+'.join(sa)  ##用‘+’号把字符串连接起来
    19 print(s9)
    20 l1 = ['oldboy','wusir','alex']
    21 s91 = '_'.join(l1) ##用'_'把字符串连接起来
    22 print(s91)
     1 # #replace 替换
     2 h = '我们都是好孩子'
     3 h1 = h.replace('','')
     4 print(h1)
     5 
     6 #find 通过元素找索引  找不到返回-1
     7 # index 通过元素找索引 找不到报错
     8 
     9 u = 'odlabced'
    10 u1 = u.find('g')
    11 print(u1)
    12 
    13 # u2 = u.index('g')
    14 # print (u2)
    15 
    16 ##字符串格式化输出format
    17 # res='我叫{}今年{}岁,爱好{}'.format('egon',18,'male')
    18 # print(res)
    19 res='我叫{0}今年{1}岁,爱好{2},我依然叫{0}'.format('egon',18,'male')
    20 print(res)
    21 # res='{name} {age} {sex}'.format(sex='male', name='egon', age=18)
    22 # print(res)
     1 #公共方法
     2 #len  count
     3 n = 'dfdfdfdfsdfsf'
     4 n1=len(n)
     5 print (n1)  ##返回字符串的长度
     6 n2 = n.count('d')  ##统计字母d出现了几次
     7 print (n2)
     8 
     9 ##判断字符串的类型
    10 name = 'jinxin989'
    11 print (name.isalnum())  ## 判段字符串由字母或数字组成
    12 print (name.isdigit())  ##是否只有字母
    13 print (name.isalpha()) ##是否只有数字
    14 #例子
    15 i = '123a'
    16 if i.isdigit():
    17     i = int(i)
    18 else:
    19     print("输入有误...")
    View Code
     

    03 bool:True,False.


    04 list:储存大量的数据
    [True,1,'alex',{'name':'oldboy'},[1,2,3],(2,3,4),{'wusir'}]
    一,索引,切片。

     1 l = ['老男孩', 'alex', 'wusir', 'taibai', 'ritian']
     2 # #增
     3 # #append 在组后增加
     4 # l.append('葫芦')
     5 # print (l)
     6 #
     7 # #insert插入
     8 #
     9 # l.insert(1,'bob')  ##在索引是1的地方插入
    10 # print (l)
    11 #
    12 # #迭代添加
    13 #
    14 # l.extend('alex')
    15 # print (l)

     1 # #删除
     2 # #pop 有返回值,按照索引删除
     3 #
     4 # print (l.pop(0))
     5 # print (l)
     6 # #remove
     7 # l.remove('alex')
     8 # print (l)
     9 #
    10 # #clear  清空列表
    11 # # l.clear()
    12 # # print (l)
    13 #
    14 # #del 内存级别删除列表
    15 #
    16 # # del l
    17 # # print (l)
    18 #
    19 # #按索引删除
    20 # # del l[1]
    21 # # print(l)
    22 #
    23 # #切片删除
    24 #
    25 # del l[1:3]
    26 # print (l)

     1 #
     2 #按照索引去改
     3 # print (l[2])
     4 # l[2]= 'huningfei'
     5 # print (l)
     6 # #按照切片去改
     7 # l[:2] = 'abc'  ##把索引是0和1的全部改成了abc
     8 # print (l)
     9 # l[1:3] = [111,222,333]
    10 # print (l)
    1 # #查询
    2 # #按照索引去查询,按照切片去查下
    3 # for i in l:
    4 #     print (i)
    5 #
     1 # #其他办法
     2 #
     3 a = [8,7,8,3,3,5,3,1,2]
     4 # #count 计数
     5 # print (a.count(8))
     6 #
     7 # #len
     8 # print (len(a))
     9 #
    10 # #sort 从小到大排序
    11 a.sort()
    12 print (a)
    13 a.sort(reverse=True)  ##从大到小
    14 print (a)
    15 b = ['a','b','e','e','g']
    16 #reverse  ##倒过来排序
    17 b.reverse()
    18 print (b)
    View Code

     获取列表的下标及索引

    name = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', '1', '2', '3']

    name.index('Amy')

    05 tuple 元组 只读列表

    特点:不可变,用小括号,用逗号分隔,当只有一个元素时,必须加逗号。
    (True,1,'alex',{'name':'oldboy'},[1,2,3],(2,3,4),{'wusir'})

    属性:

     1 tu = (11,2,True,[2,3,4],'alex')
     2 #查找
     3 for i in tu:
     4     print (i)
     5 
     6 #切片
     7 print (tu[1])
     8 print (tu[:3:2])
     9 
    10 print(tu.index(True))
    11 #count 统计
    12 print(tu.count(2))
    13 #len长度
    14 print(len(tu))
    15 #添加
    16 tu[-2].append('99')
    17 print (tu)
    View Code


    06 dict字典:大量的数据,关联型数据。查询速度非常快,符合二分查找。

    '''
    字典的key是唯一的。key 必须是不可变的数据类型。
    key:不可变的数据类型(可哈希):str,bool,tuple,int。
    value:任意数据类型。
    数据类型分类:
    不可变的数据类型(可哈希):str,bool,tuple,int
    可变的数据类型:dict,list,set。
    容器类数据类型:list,tuple,dict,set.
    字典:存储数据多,关系型数据,查询速度快(二分查找)。
    3.6版本之前,字典是无序的,3.6之后字典是有序的。

    {'name':'oldboy','age':45,'name_list':['张三'....]}

     1 dic = {'name': 'taibai', 'age': 21, 'hobby': 'girl', }
     2 #
     3 # #增加
     4 #
     5 # dic ['high'] = 180  ##有则覆盖,无则添加
     6 # print (dic)
     7 # dic ['name'] = 'ritian'
     8 # print (dic)
     9 #
    10 # dic.setdefault('high',170) ##有则不变,无责添加
    11 # print (dic)
    12 # dic.setdefault('sex','nan')
    13 # print (dic)
    14 #
    1 # #删除
    2 # print (dic.pop('name'))
    3 # print (dic.pop('name1','没有辞职,sb'))
    4 #
    5 # # dic.clear() #清空
    6 # # print (dic)
    7 #
    8 # print (dic.popitem()) #随机删除,返回值
    View Code
    1 # #改
    2 # dic['name'] = 'laonanhai'
    3 # print (dic)
    4 #
    5 # dic2 = {'name':'alex','weight':75}
    6 # dic2.update(dic)
    7 # print (dic)
    8 # print (dic2)
    View Code
     1 #
     2 
     3 # print (dic['name'])
     4 # print (dic.get('name'))
     5 # print (dic.get('name1','没有此键值'))
     6 
     7 
     8 # #keys() values() items()
     9 # print (list(dic.keys()))  ##可以取出键值,变成列表
    10 # for i in dic.keys():  ##可以循环打印键值
    11 #     print (i)
    12 #
    13 #
    14 # print (list(dic.values()))   ##只能取出values
    15 # for i in dic.values():
    16 #     print (i)
    17 #
    18 # print (list(dic.items()))  ##可以同时取出键值和values
    19 # for i in dic.items():
    20 #     print (i)
    View Code
     1 ##其他类型
     2 #分别赋值
     3 a,b = 1,2
     4 print (a,b)
     5 a = 1
     6 b = 5
     7 print (a,b)
     8 
     9 for k,v in dic.items():
    10     print (k,v)
    11 
    12 #len 长度
    13 
    14 print (len(dic))
    15 
    16 ##fromkeys  创建一个新字典
    17 
    18 dic1 = dict.fromkeys('abc', '张三')
    19 print (dic1)
    20 
    21 #打印结果  {'a': '张三', 'b': '张三', 'c': '张三'}
    22 dic3 = dict.fromkeys('abc',[10])
    23 print (dic3)
    24 
    25 dic3['a'].append('oldboy')
    26 print (dic3)
    27 #打印结果      {'a': ['oldboy'], 'b': ['oldboy'], 'c': ['oldboy']}
    View Code

    07 set集合:关系型数据的交集,并集,差集,子集.... 列表的去重。

    '''
    集合:
    无序,不重复的数据类型。它里面的元素必须是可哈希的。但是集合本身是不可哈希的。
    1:关系测试。交集并集,子集,差集....
    2,去重。(列表的去重)
    '''

    set1 = {'alex','wusir','ritian','egon','barry'}

     1 ##去除重复

    2 l1 = [1,1,2,2,3,3,4,5,6,6]

    3 l2 = list(set(l1))

    4 print(l2) 

     1 #
     2 set1 = {'alex','wusir','ritian','egon','barry'}
     3 
     4 set1.add('999')
     5 print (set1)
     6 
     7 set1.update('abc')
     8 print (set1)
     9 
    10 #打印结果是'alex', 'ritian', 'b', '999', 'a', 'c', 'egon', 'barry', 'wusir'}
    View Code
     1 #
     2 #remove
     3 set1.remove('egon')
     4 print (set1)
     5 
     6 # #pop
     7 # set1.pop()  ##随机删除不能指定
     8 # print (set1)
     9 
    10 #clear
    11 set1.clear()
    12 print (set1)
    13 
    14 # del set1  # 删除集合
    15 # print(set1)
    View Code

    集合:

     1 set1 = {1,2,3,4,5}
     2 set2 = {4,5,6,7,8}
     3 
     4 #交集 &  intersectio
     5 # print(set1 & set2)
     6 # print(set1.intersection(set2))
     7 
     8 #并集 |   union
     9 # print(set1 | set2)
    10 # print(set1.union(set2))
    11 
    12 #差集  -  difference
    13 # print(set1 - set2)
    14 # print(set1.difference(set2))
    15 
    16 #反交集 ^ symmetric_difference  就是打印双方都没有的元素
    17 # print(set1 ^ set2)
    18 # print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}
    19 # set1 = {1,2,3}
    20 # set2 = {1,2,3,4,5,6}
    View Code

    其他

     1 set4 = {1,2,3}
     2 set5 = {1,2,3,4,5,6}
     3 
     4 print (set4 < set5)  ##返会true  说明set1是set2子集。
     5 print(set4.issubset(set5))
     6 
     7 print(set5 > set4)
     8 
     9 #frozenset  返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
    10 s = frozenset('barry')
    11 s1 = frozenset({4,5,6,7,8})
    12 print(s,type(s))
    13 print(s1,type(s1))
    View Code

     二  一些数据类型要注意的地方

    #再循环一个列表时,不要对列表进行删除的动作(改变列表元素的个数动作),会出错

     1 #再循环一个列表时,不要对列表进行删除的动作(改变列表元素的个数动作),会出错
     2 l1 = ['alex', 'wusir', 'taibai', 'barry', '老男孩']
     3 #1
     4 # del l1[1::2]
     5 # print(l1)
     6 #
     7 # for i in range(len(l1)):
     8 #     print(l1)  # ['alex', 'wusir', 'taibai', 'barry', '老男孩']
     9 #                 # ['alex', 'wusir', 'taibai', 'barry', '老男孩']
    10 #                 # ['alex', 'taibai', 'barry', '老男孩']
    11 #                  # ['alex', 'taibai', 'barry', '老男孩']
    12 #     print(i) # 0 1  2  3
    13 #     if i % 2 == 1:
    14 #         del l1[i]
    15 #     print(l1) # ['alex', 'wusir', 'taibai', 'barry', '老男孩']
    16 #              # ['alex', 'taibai', 'barry', '老男孩']
    17 #             # ['alex', 'taibai', 'barry']
    18 #     print(i) # 0 1
    View Code

    # dict 再循环字典时,不要改变字典的大小。

     1 # dict 再循环字典时,不要改变字典的大小。
     2 # dic = {'k1':'v1','k2':'v2','k3':'v3','r':666}
     3 # l1 = []
     4 # for i in dic:
     5 #     if 'k' in i:
     6 #         l1.append(i)
     7 # # print(l1)
     8 #
     9 # for i in l1:
    10 #     del dic[i]
    11 # print(dic)
    View Code


    #tu 如果元组里面只有一个元素并且没有逗号隔开,那么他的数据类型与该元素一致。

    1 # tu1 = (1)
    2 # print(tu1,type(tu1))
    3 # tu2 = ('alex')
    4 # print(tu2,type(tu2))
    5 #
    6 # tu3 = (['alex',1,2])
    7 # print(tu3,type(tu3))
    View Code
    二 深浅copy和小数据池

     1 #浅copy
     2 #对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,
     3 # 指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性
     4 l1 = [1,2,3]
     5 l2 = l1.copy()
     6 l1.append(666)
     7 print(l1,l2)
     8 print(id(l1),id(l2))
     9 
    10 l1 = [1,2,3,[22,33]]  ##这里因为[22,33]属于第二层,所以两个列表都一样
    11 l2 = l1.copy()
    12 l1[-1].append(666)
    13 print(l1,l2)
    14 print(id(l1[-1]),id(l2[-1]))
    15 
    16 #深copy 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
    17 import copy
    18 l1 = [1,2,3,[22,33]]
    19 l2 = copy.deepcopy(l1)
    20 l1[-1].append(666)
    21 print(l1,l2)
    22 print(id(l1[-1]),id(l2[-1]))
    View Code
     1 # id == is
     2 a = 'alex'
     3 b = 'alex'
     4 print(a == b)  # 数值
     5 print(a is b)  # 内存地址
     6 print(id(a))
     7 
     8 #python中 有小数据池的概念。
     9 # int -5 ~256 的相同的数全都指向一个内存地址,节省空间。
    10 # str:s = 'a' * 20 以内都是同一个内存地址
    11     #只要字符串含有非字母元素,那就不是一个内存地址
    View Code

    三 字典和列表互相嵌套的练习
     1 a = [{"id":1,"name": "电脑", "price": 1999},{'num': 2, 'price': 10, 'name': '鼠标'}]  ##列表套字典
     2 for i in a:
     3     print(i.get("name"),i.get("price"))
     4     print(a[0].get("name"),a[0].get("price"),a[1]["name"],a[1]["price"])#根据索引去获取键值所对应的value
     5 
     6 分别打印为:
     7 电脑 1999
     8 鼠标 10
     9 
    10 电脑 1999 鼠标 10
    11 电脑 1999 鼠标 10
    12 
    13 有三种取值方式


     1 dic = {"k1": {"k2": {"k3": "v3"}}}   ##字典套字典
     2 print(dic["k1"]["k2"]["k3"]) ##取出k3的值
     3 
     4 打印结果为:v3
     5 
     6 a = ["age",{"name":"huningfei"},["aa",'b','c']]  ##列表套字典和列表
     7 print(a[1].get("name"))  ##获取name的key
     8 print ((a[2][1])) ##取出最后一个列表里面的b值
     9 打印结果分别为
    10 
    11 huningfei
    12 b
    13 
    14 b = {"a":"1","c":"23","d":["1","2","3"]}  ##字典套列表
    15 print (b.get("d"))  ##取出d的key
    16 print(b.get("d")[1])  ##单独取出d的一个值
    17 打印结果分别为:
    18 ['1', '2', '3']
    19 2
    四 字符串和列表之间的相互转换
    1 ##列表转换字符串
    2 name = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', '1', '2', '3']
    3 b = ','.join(name)
    4 print(b,type(b))
    5 
    6 
    7 字符串转换列表
    8 a='hu,ning,fei '
    9 print(a.split())

    五 列表和字典之间的相互转换

     1 #列表转字典
     2 1#两个列表转字典
     3 list1 = ['key1','key2','key3']
     4 list2 = ['1','2','3']
     5 print(dict(zip(list1,list2)))
     6 #打印结果 {'key1': '1', 'key2': '2', 'key3': '3'}
     7 
     8 1#嵌套列表转字典
     9 list3 = [['key1','value1'],['key2','value2'],['key3','value3']]
    10 print(dict(list3))
    11 #打印结果 {'key1': 'value1', 'key3': 'value3', 'key2': 'value2'}
    12 
    13 ##字典转列表
    14 new_list=[]
    15 dic={'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
    16 for i in dic.items():
    17     new_list.append(i)
    18 print(new_list)
    19 print(new_list[0][1]) ##取出列表里指定的值
    20 #打印结果 [('key1', 'value1'), ('key3', 'value3'), ('key2', 'value2')]
     


  • 相关阅读:
    准备使用 Office 365 中国版--邮箱迁移
    准备使用 Office 365 中国版--域名
    中国版的 Office 365
    了解 Office 365
    MySQL Database on Azure 参数设置
    MySQL Database on Azure 的用户名
    Android NOTE
    从源码看Android中sqlite是怎么通过cursorwindow读DB的
    一个由proguard与fastJson引起的血案
    【转载】淘宝架构框架发展史
  • 原文地址:https://www.cnblogs.com/huningfei/p/8735265.html
Copyright © 2011-2022 走看看