标准数据类型
Python3 中有六个标准的数据类型:
- Number(数字): int、float、bool、complex(复数)
- String(字符串)
- List(列表)
- Tuple(元组)
- Sets(集合)
- Dictionary(字典)
在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或空格进行填充,如widths.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()))。