python3 数据类型

2018-06-26  本文已影响0人  meetliuxin

标准数据类型
Python3 中有六个标准的数据类型:

在Python中变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。等号(=)用来给变量赋值。

一、Number(数字)

Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
注意:在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。

int类型的数据是没有长度限制的,它的最大长度只与计算机的内存有关。

bin(i) 返回二进制表示结果,
hex(i) 十六进制,
int(i) 整数(如果x是浮点数就会返回其整数部分,
oct(i) 八进制,
int(s,base)将字符串转换为整数.幂可以用** 实现(10** 5,2**4)。内置的float与str类型都支持到整数的转换。
chr() 将数字转换成字符,
ord() 将字符转换成ASCII码;
round() 函数对值进行四舍五入。整数和浮点数相加结果是浮点型。

python提供了三种浮点值:内置的float与complex类型,以及标准库的decimal.Decimal类型

一、float类型存放双精度的浮点数,具体取值范围依赖于构建python的c编译器,由于精度受限,进行相等性比较不可靠。
简单比较两个float是否相等:

import os
def equal_float(a,b):
     return abs(a-b)<=sys.float_info.epsilon

math模块提供了很多float数据:math.pi
math.pow(x,y):x的y次幂(浮点值)

二、decimal
如果需要高精度,可使用decimal模块的decimal.Decimal数,这种类型可以准确的表示循环小数,但是处理速度较慢,适合于财政计算。
a=decimal.Decimal(5555)或a=decimal.Decimal("555.555")
三、复数
复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。如z=3.5+2j,其中实部和虚部可分别用z.real,z.imag取得。专用函数z.conjugate()可以反转虚部的符号。

二、字符串

字符串的追加可用+=,但并不是特别高效,连接大量字符串可用seq.join()。
"xx".join(seq)则可以将xx依次插入每两个seq元素之间,形成一个str。
字符串的切片操作

字符串分割partition(),rpartition(),split(),strip():

  • patition()将字符串分割为三段:关键字前,关键字,关键字后.
  • split()将字符串以关键字为分割点进行分割(结果不包含关键字,多个关键字会多次分割)
  • strip()将字符串的首尾空格去掉,如果给了参数,就去掉首尾的参数,但参数必须是位于字符串的首尾,不然去不掉.分支函数lstrip(),rstrip()为去掉左边或者右边的末端空格或字符.

字符串常用操作函数:

s.strip(chars);
s.find(x,start,end);
s.index(x.start,end);
s.format();
s.partition(x);
s.replace(x,y,n)    用y替换x,可选n表示最多替换n次;
s.split(x,n)       最多分割n次,s.rsplit()从右边开始分割;
s.splitlines(f)     返回在行终结符处进行分割产生的列表,并剥离行终结符(除非f为True);
s.count(x,start,end)  计数;
s.join(seq)       返回seq的每个项都以s连接起来的结果,s可以为空;
s.capitalize()   将字符串首字母大写;
s.lower()        将s中的字符变为小写;
s.upper()       返回大写化版本;
s.title()        将每个单词的首字母大写;
s.swapcase()      将大写变小写,小写变大写;
s.islower()       如果s至少有一个可小写的字符且所有可小写的字符都是小写则返回True;
s.isupper()       如果s至少有一个可大写的字符且所有可大写的字符都是大写则返回True;
s.istitle()       如果s是一个非空的首字母大写字符串,则返回True;
s.zfill(w)       返回s的副本,如果比w短,从开始处用0补充,使长度和w一样;
s.center(width,char) 返回一个以s为中心长度为width的字符串,如果有空余则用可选参数char或空格进行填充,如width<len(s),则返回整个s;
s.ljust(width,char)  同上,左对齐;
s.rjust(width,char)  同上,右对齐;
s.encode(endoding,err) 返回一个bytes对象,该对象使用默认的编码格式或指定的编码格式来表示该字符串,并根据可选的err参数处理错误;
s.endswith(x,start,end)如果以x结尾则返回True,否则返回False;
s.startswith(x,start,end)如果以x开始则返回True;
s.expandtabbs(size)  返回s的一个副本,其中的制表符使用8个或指定数量的空格替换;
s.isalnum()       判断是否全是字母数字且非空;
s.isalpha()       判断是否全是字母且非空;
s.isdecimal()      判断是否每个字符都是Unicode的基数为10的数字;
s.isdigit()       判断是否每个字符都是ASCII数字;
s.isidentifier()    判断是否不为空
s.isnumeric()      判断是否每个字符都是数值型的Unicode字符且非空;
s.isprintable()    判断是否每个字符都是可打印的且非空;
s.isspace()       判断是否每个字符都是空白字符;
s.maketrans()
s.translate()

三、集合set

集合(set)是一个无序不重复元素的序列。

基本功能是进行成员关系测试和删除重复元素。

可以使用大括号 { } 或者 set() 函数创建集合,创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

集合是没索引位置区分的,也不能分片或按步距分片。集合中每个数据都是独一无二的,所以集合常被用于删除重复的数据项(x=list(set(x)))。

1、集合常用函数:

   s.add(x)  添加x到集合s中;

   s.clear()  清空;

   s.pop()    移除集合中任意一项,如果为空了则返回产生KeyError异常;

   s.remove(x) 移除x项,如x不存在就产生KeyError异常;

   s.discard(x)  如果x 存在就移除掉该项;

   s.copy()   浅拷贝;  *

   s.different(t)s-t  返回一个新集合,其只包含s但不在集合t中;  *

   s.difference_update(t)s-=t  移除每一个在集合t但不在s中的项;

   s.intersection(t)s&t     返回s和t的交集;  *

2、集合联合操作运算符结果:

   s|t,合集;s&t,交集;s-t,减去与t的交集;s^t,合集减去交集。

3、集合内涵(同列表内涵)

   {expression for item in iterable}

   {expression for item in iterable if condition}

4、固定集合(frozenset())

   一旦创建了就不可改变,同static,可用的函数只有那些不改变集合本身内容的函数

四、列表list

   1列表也可存储任意类型的数据,且可使用比较操作符(逐项进行比较)和修改列表内容。

   2.列表支持元组的所有操作,同时还有以下函数:

   append()  追加

   count(x)  统计x出现的次数

   index(x,start,end)找x,如没有则产生一个ValueError,

   extend()    (等同于+=),

   insert(i,x)  (在索引位置i处插入x),

   pop()    移除最后一项

   pop(i)    (移除i索引位置处的数据项,如没有i值,则默认移除最后一项),

   remove(x)  (移除从左边开始出现的第一个数据为x的项,如没有则返回一个ValueError),

   reverse()    反转,

   sort()     排序。

列表生成式:

[expression for item in iterable](对iterable中每个数据项进行expression操作)

[expression for item in iterable if condition],对限定条件的对象进行操作。

#计算闰年。(range同样为前闭后开)
例:leaps=[y for y in range(1900,2000) if (y%4==0 and y%100!=0)or(y%400==0)] 

五、字典dict

1.常用函数

   d.clear()  清空

   d.copy()  浅拷贝

   d.pop(k,v) 返回k的值,并删除k项,如果k不存在,就返回KeyError或者v(如v存在的话)

   d.popitem() 移除任意一对键-值,如果d为空就产生KeyError

   d.values()  返回字典中所有值的视图

   d.keys()   返回字典所有键的视图

   d.items()  返回字典所有(key,value)对的视图

   d.get(k)   返回k的值,如果k不存在就返回None

   d.get(k,v)  返回k的值,如果k不存在就返回v

   d.setdefault(k,v) 同get(),如果k不存在就插入一个k项,值为None或者v(如果给了v)

   d.fromkeys(s,v) 返回一个dict,它的键为序列s的项,值为None或者v(如果给了v)

   d.update(a) 用a更新d,如果键已存在则更新值,如不存在则插入。a可以是dict也可以是(key,value)对的一个iterable.

2、对字典的迭代

   对键:for key in d:    print(key)

          或:for key in d.keys():   print(key)

   对值:for value in d.values():     print(value)

   对键-值:for key,value in d.items():    print(key,value)

          或:for item in d.items():    print(item[0],item[1])

3、字典内涵

  {keyexpression:valueexpression for key ,value in terable}

  {keyexpression:valueexpression for key ,value in terable if condition}

 例:一个字典的键-值反转:inverted_d={v:k for k, v in d.items()}

4、默认字典(collectons.defaultdict())

默认字典永远不会产生KeyError,当查询的键不存在时,字典就会自动生成一个新的以此查询键为键的项,其值为创建字典时设定的默认值。

例:words=collections.defaultdict(int),新增入此字典的默认值就会是数字0。传入的int为工厂函数(也就是一个不带括号、没有参数的函数),以后可用lambda函数进行简单设置。

5、有序字典(collctions.OrderedDict())

字典的数据项以插入的顺序进行保存,如果用了一个无序的字典来进行update(),得到的结果也会变成无序的。

do=collections.OderedDict([('z',5),(3,6),(8,'a')])或者先建一个空的,再一项一项的添加。

将一个普通字典转换成有序字典:d=collections.OderedDict(sorted(d.items()))。

上一篇下一篇

猜你喜欢

热点阅读