首页 > 技术文章 > Python数据类型及方法整理大全

dy99 2020-09-13 13:56 原文

 
前言:主要是对Python数据类型做一个整理,部分知识点源于《python3程序开发指南(第二版)》
 

一、Python的关键要素

1.1 要素1:数据类型

  int类型
 str类型
组合数据类型:
     元组
     列表
     字典
     集合
 
组合数据类型的区别:
     1.形式不一样:列表是[]形式,元组()形式,字典、集合是{}形式
     2.可变不可变:列表、字典、集合可变,元组不可变
     3.哈希不可哈希:列表、字典、集合不可哈希,字符串str、数字、元组tuple可哈希
       可哈希的数据类型,即不变的数据结构 (字符串、整数、元组)
       不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)
     4.有序无序:列表、元组有序,字典、集合无序
     5.集合的元素,字典的key必须是可哈希的
     6.集合中的元素都是不重复的,元组和列表可以重复
     7.支持的内置方法不同

二、数据类型

  组合数据类型是对象,因此每种数据类型都有自己的方法。Python所有变量实际上是对象引用

2.1 标识符与关键字

    Python的关键字
Python标识符命名规范:
  1. 由字符(A~Z 和 a~z)、下划线和数字组成,但不能以数字开头;
  1. 不能以python中的关键字命名;
    • 2.1. 不能与Python关键字同名
    • 2.2 不能与Python内置数据类型(如int/float/list/str/tuple)同名
    • 2.3. 不能与Python内置函数名与异常名作为标识符名
  1. Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。
  1. Python 中,标识符中的字母是严格区分大小写的,相同单词大小格式不同代表意义不同,如:
    • number = 0
    • Number = 0
    • NUMBER = 0
  1. 变量名命名要有意义,最好见名知意,提高代码可读性
  1. 推荐使用大小驼峰型(GuessAge或guessAge)和下划线(guess_age)来命名;
  1. 常量通常使用大写来定义
  1. Python 语言中,以下划线开头的标识符有特殊含义,例如:
    • 以单下划线开头的标识符(如 _width),表示不能直接访问的类属性,其无法通过 from...import* 的方式导入;
    • 以双下划线开头的标识符(如__add)表示类的私有成员;
    • 以双下划线作为开头和结尾的标识符(如 __init__),是专用标识符。
    因此,除非特定场景需要,应避免使用以下划线开头的标识符。
 

2.2 Integral类型

内置Integral类型:int、浮点类型(浮点数、复数、十进制数字)、布尔值,True表示1,False表示0

2.2.1 整数

  •                   图:数值型操作与函数
 

2.3 字符串

 字符串可以使用引号创建,python中字符串是不可变对象。字符串是一个有序的字符的集合,一对单,双或三引号中间包含的内容称之为字符串,其中三引号可以由多行组成

2.3.1字符串转义

2.3.2 字符串运算符

2.3.3 字符串格式化
 

2.3.4 字符串操作方法

  字符串可以取切片(通过索引、步长值取值)
语法格式:
  • seq = "abcdefg"
  1.   [:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串
  2. seq[start]  

     如: seq[1],取第二个字符“b”

      3. [start:] 从start 提取到结尾

      4.  [:end] 从开头提取到end - 1
      5. seq[start:end]     

    如: seq[1:3] 包含上边界不包含下边界,因此取值为"bc"

    如: seq[1:]  取值从第二个字符至结尾:"bcdefg"

     6.  seq[start:end:step]  如seq[1:4:2]步长值为2,因此取值"bd"

     7.   负索引:-1表示最后一个字符

  seq可以是任意序列,比如列表、字符串或元组,start、end、step必须是整数,
 
 
2.3.5  string模块
 

2.4  元组

  所谓元组的不可变指的是元组所指向的内存中的内容不可变。

2.4.1 元组的内置方法

2.4.2 访问元组

  元组可以使用下标索引来访问元组中的值
  
#!/usr/bin/python3
 tup1 = ('Google', 'Runoob', 1997, 2000)
 print (tup1[0])
 print (tup2[1:5])

2.4.3 修改元组

  元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:
 tup1 = (12, 34.56)
 tup2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的。# tup1[0] = 100
#创建一个新的元组,可进行元组合并
 tup3 = tup1 + tup2
 print (tup3)

2.4.4 删除元组

  元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:
tup = ('Google', 'Runoob', 1997, 2000)
del tup

2.4.5 元组运算符

  与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。
 

2.5 列表

2.5.1  列表方法

2.5.2 列表内涵

     Python列表内涵(List Comprehensions,也译作“列表推导式”)是Python有力的语法之一,常用于从集合对象中有选择地获取并计算元素,虽然多数情况下可以使用for、if等语句组合完成同样的任务,但列表内涵书写的代码更简洁(当然有时可能会不易读)。
  列表内涵是一个表达式,也是一个循环,该循环有一个可选的,包含在方括号中的条件,作用是为列表生产数据选项,并且可以使用条件过滤掉不需要的数据项。
列表内涵最简单的形式如下:
      [item for item in iterable]
  上面的语句将返回一个列表,其中包含iterable中的每个数据项,在语义上与list(iterable)是一致的。有两个特点使得列表内涵具有更强大的功:一个是可以使用表达式,另一个是可以附件条件,由此带来如下两种实现列表内涵的常见语法格式:
    [expression for item in iterable]

         [expression for item in iterable if condition]

第二种 相当于
   temp=[]
   for item in iterable:
        if condition:
             temp.append(item)

 

例子1:指定生成闰年方式
   
leaps=[]
   for year in range(1900,1940):
       if(year%4==0 and year%100!=0)or (year%400==0)
           leaps.append(year)  
使用列表内涵
 leaps=[y for y in range(1900,1940) if(y%4==0 and y%400!=0) or(y%400=0)] 
例子2:计算50以内的和
print(sum([i for i in range(1,51)]))
print(sum(range(1, 51)))
例子3:计算九九乘法表
s = [(x, y, x*y) for x in range(1, 10) for y in range(1,10) if x>=y] 

 

2.6 集合

Python提供两种内置的集合类型:可变的set类型,固定的frozenset类型。
集合特性:
1.集合元素必须是可哈希即不可变数据类型(比如float,frozenset,int,str,touple)
2.集合元素是无序的,不能使用索引、切片取值
只有可哈希运算的对象可以添加到集合中,所有固定的数据类型(比如float,frozenset,int,str,touple)都是可哈希运算的,可以添加到集合中。内置的可变数据类型(比如list,dictset)都是不可哈希的,因为其哈希值会随着包含项数的变化而变化,因此,这些数据类型都是不能添加到集合中的。
集合是0个或多个对象引用的无序组合,这些对象所引用的对象都是可哈希运算的。几个是可变的,但由于其中的项是无序的,因此没有索引位置,不能分片或按步距分片。
2.6.1 集合方法与操作符

2.6.2 集合内涵

集合内涵是一个表达式,也是一个带有可选条件(包含在花括号中)的循环,与列表内涵类似,也支持两种语法格式
{expression for item in iterable}
  •    {expression for item in iterable if condition}
  • 我们可以使用上面语法过滤,下面给出一个实例:
  • Html = {x for x in files if x.lower().endswith(('.htm','.html'))}   意思是集合html只存放那些以.htm或.html结尾的文件名这里不区分大小写
 

2.7 映射类型

字典特性:
   1.key是可哈希运算的对象即(比如float,frozenset,int,str,touple)
  • 2.字典的键是不能重复的,独一无二
  •  3.字典是无序的,不能通过索引取切店
         4. 字典是可变的
字典的方法:
python 字典 setdefault()和get()方法比较
  dict.setdefault(key, default=None)  -->  有key获取值,否则设置 key:default,并返回default,default默认值为None,会修改原字典
  dict.get(key, default=None)  -->  有key获取值,否则返回default。default默认值为None。
 
 
字典内涵
  两种语法格式:
  [keyexpression:valueexpression for key, value in iterable]
  [keyexpression:valueexpression for key, value in iterable if condition]
实例一:如果使用字典内涵创建字典,键为当前目录中文件的文件名,值为以字节计数的文件大小
os.listdir()返回传递给函数的路径中包含的文件与目录列表但列表中不会包含"."".."
os.path.getsize()函数返回给定文件的大小(以字节计数)
file_sizes = {name:os.path.getseize(name) for name in os.listdir(".")}
file_sizes = {name:os.path.getseize(name) for name in os.listdir(".")
if os.path.isfile(name)}

 

字典内涵可用于创建反转目录,比如给定字典d,生成一个新字典,新字典的键是d的值,值是d的键
  inverted_d = {v:k for k,v in d.items()}

 

推荐阅读