zoukankan      html  css  js  c++  java
  • Python学习二《数据类型介绍》

    一,为什么在其他语言中需要声明数据类型而Python中不需要?

         

               如:a,b=b,a

                     这个也与python中a代表地址有关,其它语言中把值赋给a的同时也限制了a的类型,其它语言中a代表的就是一个实实在在的量,而python中a代表的是指向这个量的地址,这个地址可以指向任何类型数据的存储空间,指向整型,a就是整型,指向字符串,a就是字符串,指向函数对象,a就是函数对象,这就是python中的隐式声明。

                    

    每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。
    每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
    等号(=) 用来给变量赋值。
    等号(=) 运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。
    变量的值变更的过程其实只是变量内部的地址值变更。所以不论变量值是什么类型,均可以使用一段地址值来进行表示,
    地址值指向的是什么类型,就是什么类型。

    二,Python的六个标准数据类型介绍:

         1,Numbers(数字)

       2,String(字符串)

             3,List(列表)

             4,Tuple(元组)

         5,Set(集合)

             6,Dictionary(字典)

     其中某些资料中,将Boolean(布尔值)、None(空值)也单独作为一个数据类型,所以八个。也有将日期等作为数据类型,可进行不同的分类。

    三,Python支持四种不同的数字类型

       int(有符号整型)

           long(长整型【也可以代表八进制和十六进制】)

           float(浮点型)

           complex(复数)

    四,Python字符串(String) 

    1,一个个字符组成的有序的序列,是字符的集合。

    2,使用单引号、双引号、三引号yin'zhu。

    3,字符串是不可变对象。

    4,Python3起,字符串就是Unicode类型。  

    5,字符串定义的初始化

        

     6,字符串元素访问----下标

      字符串支持使用索引访问:字符串是常量,不能通过索引方式来进行赋值。

          

      有序的字符集合,字符序列:

          

      可迭代:

        

    7, 字符串join连接

      “String”.join(iterable)-->str

        将可迭代对象连接起来,使用String作为分隔符

        可迭代对象本身元素都是字符串

        返回一个新字符串

              

    8,字符串“+” 连接

      将2个字符串连接在一起

      返回一个新的字符串

    9,字符串分隔

      分隔字符串的方法分为2类

        split系:split(sep=None,maxsplit=-1)

          从左到右,sep指定分隔字符串,缺省的情况下空白字符串作为分隔。

          maxsplit指定分隔的次数,-1表示遍历整个字符串

          将字符串按照分隔符分隔成若干字符串,并返回列表。

        附注:splitline([keepends])--->list of Strings

            按照行来切分字符串

            keepends 指的是是否保留行分隔符

            行分隔符包括 ,   等

        

                 

        partition系

        partition(sep) ---> (head,sep,tail)   将字符串按照分隔符分隔成2段,返回这2段和分隔符的元组。

        从左至右,遇到分隔符就把字符串分隔成两部分,返回头、分隔符、尾三部分的元组,

                如果没有找到分隔符,就返回头、2个空元素的三元组。

        sep分隔字符串,必须指定。  

        

    10,字符串大小写

        upper() 全大写

        lower() 全小写

          大小写,做判断的时候用

        swapcase()  交互大小写
      

    11,字符串排版

        title() ---> str 标题的每个单词都是大写

        capitalize() ----> str  首个单词大写。

        center(width[,fillchar]) --->str   width 打印宽度,fillchar:填充的字符

        zfill(width) --->str  :width 打印宽度,居右,左边用0填充

        ljust(width[,fillchar])   --->str 左对齐

        r(width[,fillchar]) -----> 右对齐

        中文用的少,了解下。

                

     12,字符串修改

      replace(old,new[,count])----> newString

        字符串用某个新的字符串替代旧的字符串,返回一个新的字符串

        count表示替换几次,不指定就是全部替换

              

       strip([chars]) ---> str

        从字符串两端去除指定的字符集chars中的所有字符

        如果chars没有指定,去除两端的空白字符

        lstrip([chars]) ---> str 从左开始

        rstrip([chars]) ---> str 从右开始

               

    13,字符串的查找

      find(sub[,start[,end]]) ---> int

        在指定的区间(start,end),从左至右,查找子串sub,找到返回索引,找不到,返回-1

      rfind(sub[,start[,end]]) ---> int

        在指定的区间(start,end),从右至左,查找子串sub,找到返回索引,找不到,返回-1

             

         index(sub[,start[,end]]) --->int

          在指定的区间(start,end),从左至右,查找子串sub,找到返回索引,找不到抛出异常ValueError

         rindex(sub[,start[,end]]) --->int

          在指定的区间(start,end),从右到左,查找子串sub,找到返回索引,找不到抛出异常ValueError

         时间复杂度:index和count方法都是O(n),随着列表数据规模的增大,效率降低

        len(string):返回字符串的长度,即字符的个数。

        count(sub[,start[,end]]) --->int

          在指定的区间,从左到右,统计子串sub出现的次数。

           

     14,字符串判断

      endswith(suffix[,start[,end]])    --->bool

        在指定的区间(start,end),字符串是否存在suffix结尾

      startswith(suffix[,start[,end]])    --->bool

        在指定的区间(start,end),字符串是否存在suffix开头

             

     15,字符串判断is系列

        isalnum() ---> bool是否是字母或者数字组成

        isalpha() --->是否是字母

        isdecimal() --> 是否只包含十进制数字

        isdigit()----> 是否全部数字(0-9)

        isidentifier()  ---> 是否字母和下划线开头,其他都是字母、数字、下划线

        islower() ----> 是否都是小写

        isupper() ---> 是否全部都是大写

        isspace() ----> 是否只包含空表字符

    16,字符串格式化

        字符串的格式化是一种拼接字符串输出样式的手段,更灵活方便 

        方式一:通过printf-style 的形式 %d,%s,%f

           

                   

        方式二:format字符串格式化操作

               使用变量来替换字符串中的{ } 

             

                 

                                              

             

        方式三:f字符串格式化 Python3.6版本支持

          

              

    五,列表(list[])

    1, 一个队列,一个排列整齐的队伍

    2,列表内的个体称作为元素,由软肝元素组成列表

    3,元素可以是任意对象(数字,字符串,对象,列表等)

    4,列表内元素有顺序,可以使用索引

    5,线性的数据结构

    6,使用中括号[] 表示,

    7,列表是可变的

    #列表的初始化,不能一开始就定义列表的大小。
    lst = list() lst=[] lst=[2,6,9,'abc'] lst=list(rangs(5))

    8,列表的索引访问

      索引:也叫做下标,注意下标越界问题

      正索引:从左到右,从0开始,为列表中每一个元素编号。

      负索引:从右到左,从-1开始。

        列表通过索引访问:list[index] ,index就是索引,使用中括号访问。

    9,列表的查询

      index(value,[start,[stop]])

        通过值value,从指定区间查找列表内的元素是否匹配

        匹配第一个就立即返回索引。

        匹配不到,抛出异常ValueError

      count(value)

        返回列表中匹配value的次数。

      时间复杂度

        index和count方法都是O(n)

        随着列表数据规模的增大,而效率下降

      如何返回列表元素的个数?如何遍历?如何设计高效?

        len()列表的长度

    10,列表元素的修改

      索引访问修改

        list[index] = value 

        注意索引不能越界

    11,列表增加、插入元素

      append(object) -- > None

        列表尾部追加元素,返回None

        返回None就意味着没有新的列表产生,就地修改

        时间复杂度是O(1)

      insert(index,object) -->None

        在指定的索引index处插入元素Object

        返回None就意味着没有新的列表产生,就地修改

        时间复杂度是O(n),造成元素结构变化,尽量少用

        索引能超上下界吗?超越上界,尾部追加;超越下届,头部追加。

      extend(iteratable) -- > None

        将可迭代对象的元素追加进来,返回None

        就地修改:如果可迭代对象特别大时,需谨慎使用。

      +  ->  list

        连接操作,将两个列表连接起来

        产生新的列表,原列表不变

        本质上调用的是_add_()方法

      *  -> list

        重复操作,将本列表元素重复n次,返回新的列表

        如果里面是引用类型的内容,比如元组、列表等,用的时候需非常小心。

       

    12,列表删除元素:

      remove(value) --> None

        从左至右查找第一个匹配value的值,移除该元素,返回None

        就地修改

        效率:不好

      pop([index]) --> item

        不指定索引index,就从列表尾部弹出一个元素

        指定索引index,就从索引处弹出一个元素,索引超界掏出IndexError

        效率?指定索引的时间复杂度?不指定索引呢?

      clear() -- > None

        清除列表所有元素,剩下一个空列表。

    13,列表的其他操作

      reverse() -->  None 

        将列表元素反转,返回none

        就地修改。

      sort(key=None,reverse=False) --> None

        对列表元素进行排序,就地修改,默认升序。

        reverse为True,反转,降序

        key一个函数,指定key如何排序

          lst.sort(key=functionname)

      in

       [3,4] in [1,2,[3,4]]

       for x in [1,2,3,4]

          

    14,列表的复制

      <1> 通过 = 号拷贝

              

              

     <2> 通过copy 来进行浅拷贝:也称为影子拷贝,遇到引用类型,只是赋值了一个引用而已。 

          

    <3> 深拷贝

        copy模块提供了deepcopy 

            

    总结:如果只是读取不修改,那么只要进行浅拷贝就可以,如果需要修改,注意深拷贝和浅拷贝的区别。

        

    六,元组(Tuple)

     1,一个有序的元素组成集合

     2,使用小括号()表示

     3,元组是不可变的对象

    4,元组的定义 初始化

      定义:

        tuple()---> empty tuple

        tuple(iterzble) -->tuple initialized from iterable's items

    5,元组元素的访问

      支持索引(下标)

      支持正索引和负索引

      正索引不可越界,否则会引发异常IndexError

      元组通过索引访问

        tuple[index],其中index就是索引,使用中括号  

    6,元素的查询

      index(value,[start,[stop]])

        通过值value,从指定区间查找列表内的元素是否匹配

        匹配第一个就立即返回索引

        匹配不到,抛出异常ValueError

      count(value)

        返回列表中匹配value的次数

      时间复杂度

        index和count方法都是O(n)

        随着列表数据规模的增大,而效率下降

      len(tuple)

        返回元素的个数

    7,元组的其他操作

      元组是只读的,所以增,改,删的方法都没有

    8,命名元组namedtuple

      帮助文档中,查阅namedtuple,有使用列程

      namedtuple(typename,field_names,verbose=False,rename=False)

        命名元组,返回一个元组的子类,并定义了字段

        filed_name可以是空白符或逗号分隔的字段的字符串,可以是字段的列表。

            

     七,随机数(random模块)

    1,需要random模块

    2,random(a,b)返回[a,b]之间的整数

    3,choice(seq)从空序列的元素中随机挑选一个元素,比如random.choice(range(10)) ,从0-0之间随机挑选一个。

      random.choice([1,3,5,7])

    4,randrange([start,]stop[,step])从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省为1.

      random.randrange(1,7,2)

    5,random.shuffle(list) --> None 就地打乱列表元素

    6,sample(Population,k)从样本空间或者总体(序列或者集合类型)中随机取出K个不同的元素,返回一个新的列表

      random.sample(['a','b','c','d'],2)

      random.sample(['a','a'],2) 会返回什么结果

      

          

  • 相关阅读:
    REAL6410、OK6410、TE6410 的区别
    在裸奔2440时候遇到的GPIO郁闷问题(作者gooogleman)
    Jlink V8 48 RMB,力特USB转串口线 35 RMB 甩了!所剩不多,先到先得。
    一个机械专业小混混(gooogleman)学习嵌入式ARM的真实经历
    如何给自己淘宝的宝贝做google广告?
    程序员开网店的一些经验分享
    【有奖辩论】工程师和销售创业谁更有优势?
    关于高端ARM处理器选型的一些个人看法(作者:gooogleman)
    要搬家了,准备甩掉剩下的十多个源动力笔记本包,运动休闲包!
    推荐一款高性价比android /wince/Linux ARM11 S3C6410 开发板
  • 原文地址:https://www.cnblogs.com/rouroululu/p/12325550.html
Copyright © 2011-2022 走看看