zoukankan      html  css  js  c++  java
  • Python基础之数据类型

     一、运算符

      1、算术运算:

      2、比较运算符:

      3、复制运算符:

      4、逻辑运算:

      5、成员运算:

      6、三元运算:

    1 result = 值1 if 条件 else 值2

     二、基本数据类型

      1、数字

      2、布尔值

      3、长整型

      4、复数  

    三、字符串

     1 strip,lstrip,rstrip
     2 lower,upper
     3 startswith,endswith
     4 format的三种玩法
     5 split,rsplit
     6 join
     7 replace
     8 isdigit
     9 
    10 #strip
    11 name='*egon**'
    12 print(name.strip('*'))
    13 print(name.lstrip('*'))
    14 print(name.rstrip('*'))
    15 
    16 #lower,upper
    17 name='egon'
    18 print(name.lower())
    19 print(name.upper())
    20 
    21 #startswith,endswith
    22 name='alex_SB'
    23 print(name.endswith('SB'))
    24 print(name.startswith('alex'))
    25 
    26 #format的三种玩法
    27 res='{} {} {}'.format('egon',18,'male')
    28 res='{1} {0} {1}'.format('egon',18,'male')
    29 res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)
    30 
    31 #split
    32 name='root:x:0:0::/root:/bin/bash'
    33 print(name.split(':')) #默认分隔符为空格
    34 name='C:/a/b/c/d.txt' #只想拿到顶级目录
    35 print(name.split('/',1))
    36 
    37 name='a|b|c'
    38 print(name.rsplit('|',1)) #从右开始切分
    39 
    40 #join
    41 tag=' '
    42 print(tag.join(['egon','say','hello','world'])) #可迭代对象必须都是字符串
    43 
    44 #replace
    45 name='alex say :i have one tesla,my name is alex'
    46 print(name.replace('alex','SB',1))
    47 
    48 #isdigit:可以判断bytes和unicode类型,是最常用的用于于判断字符是否为"数字"的方法
    49 age=input('>>: ')
    50 print(age.isdigit())
    字符串的常用操作
     1 find,rfind,index,rindex,count
     2 center,ljust,rjust,zfill
     3 expandtabs
     4 captalize,swapcase,title
     5 is数字系列
     6 is其他
     7 
     8 #find,rfind,index,rindex,count
     9 name='egon say hello'
    10 print(name.find('o',1,3)) #顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引
    11 # print(name.index('e',2,4)) #同上,但是找不到会报错
    12 print(name.count('e',1,3)) #顾头不顾尾,如果不指定范围则查找所有
    13 
    14 #center,ljust,rjust,zfill
    15 name='egon'
    16 print(name.center(30,'-'))
    17 print(name.ljust(30,'*'))
    18 print(name.rjust(30,'*'))
    19 print(name.zfill(50)) #用0填充
    20 
    21 #expandtabs
    22 name='egon	hello'
    23 print(name)
    24 print(name.expandtabs(1))
    25 
    26 #captalize,swapcase,title
    27 print(name.capitalize()) #首字母大写
    28 print(name.swapcase()) #大小写翻转
    29 msg='egon say hi'
    30 print(msg.title()) #每个单词的首字母大写
    31 
    32 #is数字系列
    33 #在python3中
    34 num1=b'4' #bytes
    35 num2=u'4' #unicode,python3中无需加u就是unicode
    36 num3='' #中文数字
    37 num4='' #罗马数字
    38 
    39 #isdigt:bytes,unicode
    40 print(num1.isdigit()) #True
    41 print(num2.isdigit()) #True
    42 print(num3.isdigit()) #False
    43 print(num4.isdigit()) #False
    44 
    45 #isdecimal:uncicode
    46 #bytes类型无isdecimal方法
    47 print(num2.isdecimal()) #True
    48 print(num3.isdecimal()) #False
    49 print(num4.isdecimal()) #False
    50 
    51 #isnumberic:unicode,中文数字,罗马数字
    52 #bytes类型无isnumberic方法
    53 print(num2.isnumeric()) #True
    54 print(num3.isnumeric()) #True
    55 print(num4.isnumeric()) #True
    56 
    57 #三者不能判断浮点数
    58 num5='4.3'
    59 print(num5.isdigit())
    60 print(num5.isdecimal())
    61 print(num5.isnumeric())
    62 '''
    63 总结:
    64     最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
    65     如果要判断中文数字或罗马数字,则需要用到isnumeric
    66 '''
    67 
    68 #is其他
    69 print('===>')
    70 name='egon123'
    71 print(name.isalnum()) #字符串由字母或数字组成
    72 print(name.isalpha()) #字符串只由字母组成
    73 
    74 print(name.isidentifier())
    75 print(name.islower())
    76 print(name.isupper())
    77 print(name.isspace())
    78 print(name.istitle())
    其它操作
     1 # 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
     2 name = " aleX"
     3 # 1)    移除 name 变量对应的值两边的空格,并输出处理结果
     4 # 2)    判断 name 变量对应的值是否以 "al" 开头,并输出结果 5 # 3)    判断 name 变量对应的值是否以 "X" 结尾,并输出结果 6 # 4)    将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
     7 # 5)    将 name 变量对应的值根据 “l” 分割,并输出结果。
     8 # 6)    将 name 变量对应的值变大写,并输出结果 9 # 7)    将 name 变量对应的值变小写,并输出结果10 # 8)    请输出 name 变量对应的值的第 2 个字符?
    11 # 9)    请输出 name 变量对应的值的前 3 个字符?
    12 # 10)    请输出 name 变量对应的值的后 2 个字符?13 # 11)    请输出 name 变量对应的值中 “e” 所在索引位置?14 # 12)    获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
    15 
    16 # 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
    17 name = " aleX"
    18 # 1)    移除 name 变量对应的值两边的空格,并输出处理结果
    19 name = ' aleX'
    20 a=name.strip()
    21 print(a)
    22 
    23 # 2)    判断 name 变量对应的值是否以 "al" 开头,并输出结果24 name=' aleX'
    25 if name.startswith(name):
    26     print(name)
    27 else:
    28     print('no')
    29 
    30 # 3)    判断 name 变量对应的值是否以 "X" 结尾,并输出结果31 name=' aleX'
    32 if name.endswith(name):
    33     print(name)
    34 else:
    35     print('no')
    36 
    37 # 4)    将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
    38 name=' aleX'
    39 print(name.replace('l','p'))
    40 
    41 # 5)    将 name 变量对应的值根据 “l” 分割,并输出结果。
    42 name=' aleX'
    43 print(name.split('l'))
    44 
    45 # 6)    将 name 变量对应的值变大写,并输出结果46 name=' aleX'
    47 print(name.upper())
    48 
    49 # 7)    将 name 变量对应的值变小写,并输出结果50 name=' aleX'
    51 print(name.lower())
    52 
    53 # 8)    请输出 name 变量对应的值的第 2 个字符?
    54 name=' aleX'
    55 print(name[1])
    56 
    57 # 9)    请输出 name 变量对应的值的前 3 个字符?
    58 name=' aleX'
    59 print(name[:3])
    60 
    61 # 10)    请输出 name 变量对应的值的后 2 个字符?62 name=' aleX'
    63 print(name[-2:])
    64 
    65 # 11)    请输出 name 变量对应的值中 “e” 所在索引位置?66 name=' aleX'
    67 print(name.index('e'))
    68 
    69 # 12)    获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
    70 name=' aleX'
    71 a=name[:-1]
    72 print(a)
    字符串的练习

    四、列表

      序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。  

    1 list1 = ['李易峰','张艺兴','潘粤明','王思聪','古巨基']
    2 
    3 # 正向步长
    4 print(list1[0:3:1])    # list1 = ['李易峰','张艺兴','潘粤明']
    5 # 反向步长
    6 print(list1[2::-1])    # list1 = ['潘粤明','张艺兴','李易峰']
    7 # 列表翻转
    8 print(list[::-1])        # list1 = list1 = ['古巨基','王思聪','潘粤明','张艺兴','李易峰']

    五、元祖

      Python的元组与列表类似,不同之处在于元组的元素不能修改。   

     1 #作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
     2 
     3 #定义:与列表类型比,只不过[]换成()
     4 tuple1=('李易峰','张艺兴','潘粤明','王思聪','古巨基')
     5 #优先掌握的操作:
     6 #1、按索引取值(正向取+反向取):只能取
     7 # print(tuple1[0:5:1])   # 正向取值结果:('李易峰', '张艺兴', '潘粤明', '王思聪', '古巨基')
     8 print(tuple1[5::-1])     # 反向取值结果:('古巨基', '王思聪', '潘粤明', '张艺兴', '李易峰')
     9 #2、长度
    10 print(len(tuple1))      # 5
    11 #3、成员运算in和not in
    12 result1 = '李易峰' in tuple1
    13 print(result1)  # True
    14 result = '李易峰' not in tuple1
    15 print(result)   # False
    16 #4、循环
    17 for i in tuple1:
    18     print(i)
    示例

    # 练习简单购物车,要求如下:

    # 实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入

     1 print('欢饮光临,本店供应如下商品,请选购!')
     2 msg_dic={'apple':10,'tesla':100000,'mac':3000,'lenovo':30000,'chicken':10,}
     3 goods_list = []
     4 while True:
     5 
     6     for key,item in msg_dic.items():
     7 
     8         print('goods_name:{name}     goods_price:{price}'.format(name=key,price=item))
     9     choice = input('请输入商品:').strip()
    10     if not choice or choice not in msg_dic:
    11         print('商品名输入错误,请重试!')
    12         continue
    13     count = input('请输入个数:').strip()
    14     if not count.isdigit():continue
    15     goods_list.append((choice,msg_dic[choice],count))
    16     print(goods_list)
    17     print('购买成功,欢迎下次光临!')
    18     break
    View Code

     六、字典

      作用:存多个值,key/value存取,取值速度快!  

    1 # 常用语法
    2 info={'name':'李易峰','age':31,'gender':'male'}
    3 info1=dict(name='李易峰',age=31,gender='male')
    4 info2=dict([['name','李易峰'],('age',31),('gender','male')])
     1 # 1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
     2 # 即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
     3 a={'k1':[],'k2':[]}
     4 c=[11,22,33,44,55,66,77,88,99,90]
     5 for i in c:
     6     if i>66:
     7         a['k1'].append(i)
     8     else:
     9         a['k2'].append(i)
    10 print(a)
    11 # 2、统计s='hello alex alex say hello sb sb'中每个单词的个数
    12 s='hello alex alex say hello sb sb'
    13 list1=s.split()
    14 dic={}
    15 for item in list1:
    16     if item in dic:
    17         dic[item]+=1
    18     else:
    19         dic[item]=1
    20 print(dic)
    21 # 3、其它做法(setdefault用法)
    22 s='hello alex alex say hello sb sb'
    23 dic={}
    24 words=s.split()
    25 print(words)
    26 for word in words: #word='alex'
    27     dic[word]=s.count(word)
    28     print(dic)
    29 
    30 #利用setdefault解决重复赋值
    31 '''
    32 setdefault的功能
    33 1:key存在,则不赋值,key不存在则设置默认值
    34 2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值
    35 d={}
    36 print(d.setdefault('a',1)) #1
    37 d={'a':2222}
    38 print(d.setdefault('a',1)) #2222
    39 '''
    40 s='hello alex alex say hello sb sb'
    41 dic={}
    42 words=s.split()
    43 for word in words: #word='alex'
    44     dic.setdefault(word,s.count(word))
    45     print(dic)
    46 
    47 #利用集合,去掉重复,减少循环次数
    48 s='hello alex alex say hello sb sb'
    49 dic={}
    50 words=s.split()
    51 words_set=set(words)
    52 for word in words_set:
    53     dic[word]=s.count(word)
    54     print(dic)
    常用操作练习

    七、集合

      作用:去重,关系运算
      定义集合:集合可以包含多个元素,用都好分割。

      集合元素遵循的三个原则:

        a.每个元素必须是不可变类型(可hash,可作为字典的key)

        b.没有重复的元素

        c.无序

      注意:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无序纠结于集合中单个字

     1 # 一.关系运算
     2 # 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
     3 pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
     4 linuxs={'wupeiqi','oldboy','gangdan'}
     5 # 1. 求出即报名python又报名linux课程的学员名字集合
     6 print(pythons & linuxs)         # {'wupeiqi', 'gangdan'}
     7 # 2. 求出所有报名的学生名字集合
     8 print(pythons | linuxs)         # {'yuanhao', 'gangdan', 'alex', 'oldboy', 'biubiu', 'egon', 'wupeiqi'}
     9 # 3. 求出只报名python课程的学员名字
    10 print(pythons - linuxs)         # {'yuanhao', 'egon', 'alex', 'biubiu'}
    11 # 4. 求出没有同时这两门课程的学员名字集合
    12 print(pythons ^ linuxs)         # {'yuanhao', 'alex', 'oldboy', 'biubiu', 'egon'}
    13 
    14 # 二.去重
    15 #
    16 # 1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
    17 list=['a','b',1,'a','a']
    18 print(set(list))
    19 # 2.在上题的基础上,保存列表原来的顺序
    20 #方法一:不用集合
    21 list=[1,'a','b',1,'a']
    22 l1=[]
    23 for i in list:
    24     if i not in l1:
    25         l1.append(i)
    26 print(l1)
    27 #方法二:借助集合
    28 l1=[]
    29 s=set()
    30 for i in list:
    31     if i not in s:
    32         s.add(i)
    33         l1.append(i)
    34 print(l1)
    35 # 3.去除文件中重复的行,肯定要保持文件内容的顺序不变
    36 import os
    37 with open('db.txt','r',encoding='utf-8') as read_f,
    38         open('.db.txt.swap','w',encoding='utf-8') as write_f:
    39     s=set()
    40     for line in read_f:
    41         if line not in s:
    42             s.add(line)
    43             write_f.write(line)
    44 os.remove('db.txt')
    45 os.rename('.db.txt.swap','db.txt')
    46 
    47 # 4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序
    48 list=[
    49     {'name':'egon','age':18,'sex':'male'},
    50     {'name':'alex','age':73,'sex':'male'},
    51     {'name':'egon','age':20,'sex':'female'},
    52     {'name':'egon','age':18,'sex':'male'},
    53     {'name':'egon','age':18,'sex':'male'}
    54 ]
    55 s=set()
    56 l1=[]
    57 for item in list:
    58     val=(item['name'],item['age'],item['sex'])
    59     if val not in s:
    60         s.add(val)
    61         l1.append(item)
    62 print(l1)
    集合练习

    八、数据类型总结

      按存储空间的占用分(升序)

    1 数字
    2 字符串
    3 集合:无序(即无序存索引相关信息)
    4 元祖:有序(需要存索引相关信息,不可变)
    5 列表:有序(需要存索引相关信息,可变,需要处理数据的增删改)
    6 字典:无序(需要存keyvalue映射的相关信息,可变,需要处理数据的增删改)

    九、运算符  

    1 #身份运算(is ,is not)
    2 # is比较的是id,而双等号比较的是值,id若相同则值肯定相同,而值相同id则不一定相同
    3 x=123456789
    4 y=123456789
    5 # id(x),id(y)
    6 print(x == y)
    7 print(id(x)is id(y))

    ~

  • 相关阅读:
    5.3 java虚拟机的体系结构
    5.2 java虚拟机的生命周期
    3.11.5 doPrivileged()方法
    3.11.1 implies方法
    MT【178】平移不变性
    MT【177】三个乘积和
    MT【176】两两乘积
    MT【175】刚刚凑巧
    MT【174】凹凸无妨
    MT【173】齐次消元单变量
  • 原文地址:https://www.cnblogs.com/bingpan/p/8537067.html
Copyright © 2011-2022 走看看