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 指的是是否保留行分隔符

        行分隔符包括\n,\r\n  \r等

    

             

    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) 会返回什么结果

  

      

 

posted @ 2020-02-19 15:21  爱吃肉肉的路路  阅读(181)  评论(0编辑  收藏  举报