zoukankan      html  css  js  c++  java
  • python基础-基础数据类型

     一 介绍

    1. 基础数据类型

    1.1 数字int---整型

    数字主要是用于计算,使用方法较少,记住一种:

     

    #bit_bit_length()
    i = 3
    print(i.bit_length())  #转化成二进制后,占用多少位

    1.2 布尔值bool

    布尔值只有两种True与False,判断真假

    bool
    
    """
    字符串的转化
    
    int ---> str:  str(int)
    str ---> int:  int(str) str必须全是数字组成
    
    int ---> bool:  0 False  非零 True
    bool ---> int  int(True) --> 1  int(False) --> 0
    
    str ---> bool: '':False  非空字符串:True
     
    print(bool("")) False   #空字符串
    print(bool("   ")) True   #非空字符串
      
    """

    1.3 字符串str

    1.3.1 字符串的索引

     索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推。

    s = 'python自动化运维21期'  #字符串是有索引的 ,索引是角标
    
    s1 = s[0]
    print(s1)   # p
    
    print(s[2])  # t
    
    print(s[-1])  #

    1.3.2 字符串的切片

    切片就是通过字符串的索引(索引:索引:步长)截取字符串的一段,形成新的字符串

    原则:顾头不顾尾

    s = 'python自动化运维21期' 
    
    # s[起始索引:结束索引+1:步长]
    
    print(s[0:6]) # python  #顾头不顾腚,首位0可省略不写
    
    print(s[:6])  # python
    
    
    print(s[0:5:2])  # pto
    print(s[:5:2])   # pto
    
    print(s[:])    #python自动化运维21期
    print(s[:-1])  #python自动化运维21
    
    #倒着取
    print(s[-1:-5])   ## 空,倒着取的话必须加反向步长
    print(s[-1:-5:-1])   ## 期12维

    1.3.3 字符串的增删改查、常用方法

    s = 'olDBoy'
    
    * 首字母大写,其他字母小写
    
    s1 = s.capitalize()
    print(s1) #Oldboy
    
    # *** 全部变成大写upper()  验证码
    s2 = s.upper()
    print(s2) #OLDBOY
    
    # *** 全部变成小写 lower() 验证码
    s3 = s2.lower()
    print(s3) #oldboy
    
    # * 大小写反转
    s4 = s.swapcase()
    print(s4) #OLdbOY
    
    # * 非字母隔开的每个单词首字母大写
    st = 'alex wusir*oldboy3taibai'
    s5 = st.title()
    print(s5)  #Alex Wusir*Oldboy3Taibai
    
    
    s.center()  #居中, 长度自己设定,默认填充空格
    #使用方法:
    def center(self, width, fillchar=None):  # real signature unknown; restored from __doc__
        """
        S.center(width[, fillchar]) -> str
    
        Return S centered in a string of length width. Padding is
        done using the specified fill character (default is a space)
        """
        return ""
    s6 = s.center(30)
    print(s6)   #(            olDBoy      )
    s6 = s.center(30,"*")
    print(s6)   #(************olDBoy************)
    # startwith endwith  判断是否以。。。开头或者结尾,返回布尔值
    
    s = 'olDBoy'
    s7 = s.startswith('o')
    print(s7)  #True
    
    s7 = s.startswith('ol')
    print(s7)  #True
    
    s7 = s.startswith('Boy',3,)
    print(s7)   
    
    ## 源码中看到  start=None, end=None  代表有切片功能
    
    def startswith(self, prefix, start=None, end=None):  # real signature unknown; restored from __doc__
        """
        S.startswith(prefix[, start[, end]]) -> bool
    
        Return True if S starts with the specified prefix, False otherwise.
        With optional start, test S beginning at that position.
        With optional end, stop comparing S at that position.
        prefix can also be a tuple of strings to try.
        """
        return False
    # *** strip  去除首位的空格、制表符	、换行符
    。不仅仅是去除空格
    
    s = '  olD	Boy
      '
    s8 = s.strip()
    print(s8)
    
    username = input('>>>').strip()   ##在用户输入的时候,务必使用strip方法,防止用户输入前后多输入空格
    if username == 'oldboy':
        print("验证成功")
    
    # lstrip 只去除左边的  rstrip  只去除右边的
    #  split  将字符串变为列表(默认空格,可以以任何形式隔开 分割  split可设置切割次数
    
    s = 'oldboy wusir alex'
    l = s.split('o')
    print(l)
    
    s = 'sbcde sbcde sfes dsrda'
    print(s.split('e')) 
    # # join  将列表转化为字符串
    
    s = 'oldBoy'
    s9 = '+'.join(s)
    s91 = '-'.join(s)
    print(s9,s91)  #o+l+d+B+o+y o-l-d-B-o-y
    
    l1 = ['eldboy','wusir','alex'] ## join可对列表进行操作
    s91 = '='.join(l1)
    print(s91)  #eldboy=wusir=alex
    
    s = '大铁锤fsdb铁锤妹妹'
    #将铁翠替换成钢蛋
    
    # replace
    s10 = s.replace('铁锤','钢蛋')   #
    print(s10)   #大钢蛋fsdb钢蛋妹妹
    
    #find index  几乎一样的方法  通过元素找索引
    #通过字符串的位置,找到对应的方法
    s = 'oldBoy'
    ind = s.find('d')   #找不到时返回-1
    int = s.index('d')  ##找不到,会报错
    print(ind)
    print(int)

     公共方法

    s = 'sfasfasfasf'
    print(len(s))  ##计算字符串s的长度
    s = 'addfadggadfdsa'
    print(s.count('d'))  ##统计d的个数

    格式化输出 format

    res = '我叫{},今年{},爱好{}'.format('wph',28,'male')
    print(res)
    
    res = '我叫{0},我的年纪{1},我的名字是{2}'.format('wph',28,'ball')
    print(res)
    
    res = '{sex} {name} {age}'.format(sex='man',name='wph',age=18)
    print(res)

     is 系列

    name = 'jinxing123'
    print(name.isalnum())  ##p判断字符串由字母或者数据组成
    print(name.isalpha())  ##判断字符串只由字母组成
    print(name.isdigit())  ##判断字符串由数字组成

    1.4列表list

    列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:

    li = [‘alex’,123,Ture,(1,2,3,’wusir’),[1,2,3,’小明’,],{‘name’:’alex’}]

    列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。

    1.4.1 列表的增删改查

    l  = ['老男孩','alex','wusir','ritian']
    #
    #append 追加
    # l.append('葫芦')
    print(l)
    
    print(l.append('葫芦'))  ##none  打印的是增加的动作
    
    #insert 插入
    l.insert(1,'景女神')
    print(l)
    
    ## 迭代着增加
    l.extend('alex')
    print(l)
    
    l.extend(['111',222,333])
    print(l)
    增删改查--增
    #pop  有返回值 按照索引去删
    print(l.pop(0))
    print(l)
    
    #remove  按元素删除
    l.remove('alex')
    print(l)
    
    # #clear  清空列表
    # l.clear()
    # print(l)
    
    ## del  内存级别删除列表、
    # del l
    # print(l)
    
    #按索引去删
    print(l)
    del l[1]
    print(l)
    增删改查-删
    l  = ['老男孩','alex','wusir','ritian']
    
    # 按索引改
    print(l[2])
    l[2] = '武藤兰'
    print(l)
    print(l[2])
    
    # #按切片改
    # l[:2] = 'abcv'  #将切片先替换,后添加
    # print(l)
    
    l[1:3] = [111,333,222]
    print(l)
    增删改查-改
    #
    l  = ['老男孩','alex','wusir','ritian']
    
    # 按照索引去查询 
    # 按照切片去查询
    # 循环查
    for i in l:
        print(i)
    增删改查-查

    1.4.2 列表的其他方法

    l1 = [1,2,1,2,1,1,3,4]
    # count计数
    print(l1.count(1))  #列表中出现的次数
    #len 测量长度
    print(len(l1))     #测量列表的长度
    
    # 通过元素找索引
    print(l1.index(4))  #查找4的索引,只找到第一个就返回
    
    l2 = [3,2,4,6,9,8,7,1]
    #列表排序  sort
    l2.sort()
    print(l2)  #从小到大排序
    
    l2.sort(reverse=True)  ##加参数 从大到小排列
    print(l2)
    
    #倒叙排列
    l2.reverse()
    print(l2)

    1.4.3 列表的嵌套

    l1 = [1,2,'alex','wusir',['oldboy','ritian',99],'taibai']
    
    #1 将'alex'全部变成大写,放回原处,两种方法去做
    l1[2] = 'ALEX'
    l1[2] = l1[2].upper()
    
    #2  给 ['oldboy','ritian',99]  追加一个元素
    print(l1[-2])
    l1[-2].append('景nvsheng')
    print(l1)
    
    #3  将'ritian'首字母大写,放回原处
    print(l1[-2][1])
    l1[-2][1] = l1[-2][1].capitalize()
    print(l1)
    
    #将99通过数字相加,或者字符串相加等等,变成字符串'100'
    
    l1[-2][-2] = str(l1[-2][-2] + 1)
    print(l1)
    
    # 字符串相加 将10通过数字相加,或者字符串相加等等,变成字符串'100'
    l1 = [1,2,'alex','wusir',['oldboy','ritian',10],'taibai']
    l1[-2][-1] = str(l1[-2][-1]) + '0'
    print(l1)

    1.5 字典dict

    1.5.1 字典介绍

          字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。

      字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

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

     1.5.2 字典的增删改查

    dic = {'name':'taibai','age':'28','hobby':'girl'}

    1.5.2.1 增

    dict['high'] = 180   ##有则覆盖 ,无则添加  字典的改
    print(dict)
    
    dic.setdefault('high')   ##键为high,值为空none
    print(dict)
    
    dic.setdefault('high',180)   ## setdefault 有则不变,无则添加
    print(dic)
    增删改查-增

    1.5.2.2 删

    dic.pop('name')  # 根据键值对的键 来操作删除】
    print(dic.pop('name'))   #返回值 返回删除的对应键的值
    
    dic.clear()  #清空字典
    
    del  dic  #内存级别删除字典
    print(dic)
    
    del  dic['age']  #按键值删除
    print(dic)
    
    print(dic)
    dic.popitem()  #随机删除 但是3.6是有序的了,就是从后往前删除
    print(dic)
    print(dic.popitem())  #打印返回值 返回的是一个元组  删除的键值对放在元组里
    
    #pop可以删除不存在的键值对,但是不报错,返回指定结果
    print(dic.pop('name1','没有此键'))
    print(dic)
    增删改查-删

    1.5.2.3 改

    dic['name'] = 'oldboy'
    
    #2 update
    dic = {"name":"wph","age":"18"}
    dic2 = {"name":"lq","sex":"women"}
    
    dic2.update(dic)   #将dic的键值对覆盖增加到dic2
    print(dic)
    print(dic2)
    增删改查-改

    1.5.2.4 查

    print(dic['name'])  #查键对应的值,但是没有会报错。
    print(dic.get('name1','NO Have'))   ##不报错
    
    #循环查找
    # 1.2.3 个方法
    # keys()  values() items()
    
    print(dic.keys())  # 把所有的放在一个容器里。可以转化成list 更好利用
    print(list(dic.keys()))
    for i in dic.keys():
        print(i)
    
    dic.values()
    print(dic.values())  #把所有的值放到一个容器里,可以转化成list 更好利用
    
    for i in  dic.values():
        print(i)
    
    print(dic.items())    #把键值对放到元组里,可以转化成列表
    print(list(dic.items()))
    for i in dic.items():
        print(i)
    增删改查-查

    1.5.3 分别赋值

    a = 1
    a,b = 1,2
    print(a,b)
    a,b,c = ["alex","wusir","ritian"]
    print(a,b,c)
    
    # 一行代码将a b 互换
    a = 1
    b = 2
    a,b = b,a
    print(a,b)
    
    for k,v in dic.items():
        print(k,v)

    1.5.4 公共方法

    #len  键值对个数
    print(len(dic))

     1.5.5 fromkeys

     # fromkeys 创建一个字典
    dic1 = dict.fromkeys('abc','zhangshan')
    dic2 = dict.fromkeys([1,2,3],'lisi')
    print(dic1,dic2)
    
    ### 注意大坑!!!
    dic3 = dict.fromkeys('abc',[])
    print(dic3)
    dic3['a'].append('王鹏鸿')
    print(dic3)   ###会将‘王鹏鸿’加到每一个键值对中!坑

     1.5.6 字典的嵌套

    dic = {
        'name_list':['b哥', '张帝', '人帅', 'kitty'],
        '老男孩':{
            'name':'老男孩',
            'age': 46,
            'sex': 'ladyboy',
        },
    }
    
    print(dic)
    
    #1  给['b哥', '张帝', '人帅', 'kitty'] 追加一个元素'骑兵'
    
    dic['name_list'].append('骑兵')
    print(dic['name_list'])
    print(dic)
    
    #2  将kitty全部大写
    dic['name_list'][-1] = dic['name_list'][-1].upper()
    print(dic['name_list'])
    print(dic)
    
    #3  将 '老男孩'改成'oldboy'
    dic['老男孩']['name'] = 'oldboy'
    print(dic)
    
    #4  将ladyboy首字母大写
    dic['老男孩']['sex'] = dic['老男孩']['sex'].capitalize()
    print(dic)
    字典的嵌套

    1.6 元组

     一句话介绍: 可查不可改 元组不可改,但是儿子不可改孙子可改!

    tu = (11,2,True,[2,3,4,],'alex')
    #
    for i in tu:
        print(i)
    
    print(tu[1]) #2
    print(tu[:3:2]) #(11,True)
    
    print(tu.index(True))
    
    print(tu.count(2)) #计算数量
    print(len(tu))  #计算元素数量
    
    # 儿子不可改孙子可改
    tu[-2].append(666)
    print(tu)

     1.7 集合

    1.7.1 集合的作用

    集合专门用于处理数据,用处较少

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

    1.7.2 列表的常用方法-增、删、去重

    set1 = {1,'alex',False,(1,2,3)}
    l1 = [1,1,2,2,3,3,4,5,6,6]
    set2 = list(set(l1))   #列表的去重
    print(set2)
    
    #
    set1 = {'alex','wusir','ritian','egon','barry'}
    set1.add('666')
    print(set1)
    
    #update   #迭代增加
    set1.update('abc')
    print(set1)
    
    #
    set1.remove('alex')  #按照元素去删
    print(set1)
    
    set1.pop() #随机删除一个元素
    print(set1)
    
    set1.clear() #清空集合
    
    del set1    # 删除集合
    print(set1)
    集合的操作方法

     1.7.3 集合的关系测试

    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    
    #交集
    print(set1 & set2)  #生成一个新的交集
    print(set1.intersection(set2))
    
    #并集
    print(set1 | set2)  #{1, 2, 3, 4, 5, 6, 7, 8}
    print(set1.union(set2))
    
    #差集
    print(set1 - set2)  #{1, 2, 3}  set1 独有的
    print(set1.difference(set2))
    
    #反交集
    print(set1 ^ set2)  #{1, 2, 3, 6, 7, 8}
    print(set1.symmetric_difference(set2))
    
    #子集与超集
    set1 = {1,2,3}
    set2 = {1,2,3,4,5,6}
    
    #子集
    print(set1 < set2)   #True
    print(set1.issubset(set2))  #True
    #超集
    print(set2 > set1) #True
    print(set2.issuperset(set1)) #True
    
    ###
    # frozenset  冻 冻集合  集合变成不可变的数据类型
    s = frozenset('barry')
    print(s,type(s))   #frozenset({'y', 'a', 'b', 'r'}) <class 'frozenset'>
    
    s1 = frozenset({4,5,6,7,8})
    print(s1,type(s1))    #frozenset({4, 5, 6, 7, 8}) <class 'frozenset'>
    集合关系测试

    二 其他数据类型补充

    2.1 数据类型补充

    2.1.1 删除列表的奇数位元素

    l1 = ['alex', 'wusir', 'taibai', 'barry', '老男孩']
    
    #删除列表的奇数位元素
    #1
    del l1[1::2]
    print(l1)
    
    #2
    for i in l1:
        if l1.index(i) % 2 == 1:
    
    #3 #在循环一个列表的时候,不要对列表进行删除的动作(改变列表元素的动作)
    for i in range(len(l1)-1,-1,-1):  #5个元素 len(l1)-1
        if i % 2 == 1:
            # print(i)
            del l1[i]
    print(l1)
    循环列表与删除

    2.1.2  range 可定制的数字列表

    for i in range(10):
        print(i)
    
    for i in range(1,10,2):
        print(i)
    
    for i in range(10,1,-1):
        print(i)
    
    print(range(10))
    range

    2.1.3 删除字典中元素的方法

    # ##将含有k元素对应的键值对删除
    # # # dict 在循环字典时,不要改编字典的大小
    for i in dic:
        if 'k' in i:
            del dic[i]  ##改变大小会报错  ##可以先将字典改变为其他类型
    l1 = []
    for i in dic:
        if 'k' in i:
            l1.append(i)
            # print(l1)
    for i in l1:
        del dic[i]
    print(dic)

    2.1.4 不是元组的元组

    #tu  如果元组里面只有一个元素,并且没有逗号隔开,那么它的数据类型与该元素一致。就不是元组了。
    tu1 = (1)
    print(tu1,type(tu1))  #1 <class 'int'>
    
    tu2 = ('alex')
    print(tu2,type(tu2))  #alex <class 'str'>
    
    tu3 = (['alex',1,2])
    print(tu3,type(tu3))  #['alex', 1, 2] <class 'list'>

    2.2 小数据池

    # id = = is
    
    a = 'alex'
    print(a)
    b = 'alex'
    print (a==b)  #数值
    print (a is b)  #内存地址
    
    #id 测内存地址
    print(id(a),id(b))  #一定要在内存地址去试,pycharm会做优化  ab内存地址一样吗???
    
    
    #小数据池的概念?
    #int -5~256 的相同的数全部指向一个内存地址 节省空间
    #str: s = 'a' *21  #单个字符 * 21  缺少具体范围。。。了解即可
    
    # >>> a = 'A'*20
    # >>> b = 'A'*20
    # >>> print(a is b)
    # True
    
    # >>> a = 'A'*21
    # >>> b = 'A'*21
    # >>> print(a is b)
    # False
    
    # >>> a = 'alex'
    # >>> b = 'alex'
    # >>> print(a is b)
    # True
    # >>> a = 'alex#'  #含有非字母
    # >>> b = 'alex#'
    # >>> print(a is b)
    # False
  • 相关阅读:
    2019 荔枝java面试笔试题 (含面试题解析)
    2019 乐游网络java面试笔试题 (含面试题解析)
    2019 吉比特java面试笔试题 (含面试题解析)
    2019 拉卡拉java面试笔试题 (含面试题解析)
    2019 东方财富网java面试笔试题 (含面试题解析)
    2019 途牛旅游网java面试笔试题 (含面试题解析)
    2019 263云通信java面试笔试题 (含面试题解析)
    2019 贝壳找房java面试笔试题 (含面试题解析)
    偶分频、奇分频、任意整数分频
    PWM呼吸灯
  • 原文地址:https://www.cnblogs.com/wangph/p/8830457.html
Copyright © 2011-2022 走看看