Python数据结构对我们写算法很有帮助,它主要有几种方式
一、Number(数字)
1、作用:用于储存数值
2、特征:数据类型不允许改变,也就是说如果改变Number数据类型的值将重新分配内存空间。
3、Python重要有四种数值类型:
-
整型(int):通常被称为是整型或整数,是正或负整数,不带小数点。
-
长整型(long integers):无限大小的整数,整数最后是一个大写或小写的L
-
浮点数:浮点型由整数部分和小数部分组成,浮点型也可以使用科学计数法表示
-
复数:复数由实数部分和虚数部分构成,可以用a+bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型
例如:
4、Python Number中的类型转换:
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数,即使虚部为0也要写上a+0j
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
5、Python中math模块和cmath模块
-
Python math 模块提供了许多对浮点数的数学运算函数。
-
Python cmath 模块包含了一些用于复数运算的函数。
异同:cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算。
模块:——>
import math
6、Python的一些数学函数:
函数 | 返回值 ( 描述 ) |
---|---|
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10 |
ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
cmp(x, y) | 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1 |
exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) | 返回数字的绝对值,如math.fabs(-10) 返回10.0 |
floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
max(x1, x2,...) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,...) | 返回给定参数的最小值,参数可以为序列。 |
modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
pow(x, y) | x**y 运算后的值。 |
round(x [,n]) | 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。 |
sqrt(x) | 返回数字x的平方根 |
abs()和fabs()区别:
- abs()是一个内置函数,而fabs()在math模块中定义的。
- fabs()函数只适用于float和integer类型,而 abs() 也适用于复数。
7、Python随机数函数
有如下函数:
函数 | 描述 |
---|---|
choice(seq) | 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。 |
randrange ([start,] stop [,step]) | 从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1 |
random() | 随机生成下一个实数,它在[0,1)范围内。 |
seed([x]) | 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。 |
shuffle(lst) | 将序列的所有元素随机排序 |
uniform(x, y) | 随机生成下一个实数,它在[x,y]范围内。 |
8、Python三角函数:
函数 | 描述 |
---|---|
acos(x) | 返回x的反余弦弧度值。 |
asin(x) | 返回x的反正弦弧度值。 |
atan(x) | 返回x的反正切弧度值。 |
atan2(y, x) | 返回给定的 X 及 Y 坐标值的反正切值。 |
cos(x) | 返回x的弧度的余弦值。 |
hypot(x, y) | 返回欧几里德范数 sqrt(x*x + y*y)。 |
sin(x) | 返回的x弧度的正弦值。 |
tan(x) | 返回x弧度的正切值。 |
degrees(x) | 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0 |
radians(x) | 将角度转换为弧度 |
二、Python字符串
Python不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
1、创建:
创建字符串很简单,只要为变量分配一个值即可,并将这个值用引号(单引号、双引号、三引号)引起来:(不过三引号一般用于跨行的字符串,这些字符串可以包含换行符、制表符以及其他特殊字符)
var1 = 'Hello World!'
2、访问:
使用方括号来截取字符串:
var1 = 'Hello World!'
var2 = 'Python Lalala'
print('var1[0]',var1[0])
print('var2[1:5]',var2[1:5]) #注意这里是冒号
输出:
var1[0] H
var2[1:5] ytho
3、格式化:
含义:将一个值插入到一个有字符串格式符 %s 的字符串中。
print('My name is %s and weight is %d KG!' %('lalala',25))
输出:
My name is lalala and weight is 25 KG!
格式化符号:
符 号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
4、字符串运算符:
操作符 | 描述 | 实例 |
---|---|---|
+ | 字符串连接 | >>>a + b 'HelloPython' |
* | 重复输出字符串 | >>>a * 2 'HelloHello' |
[] | 通过索引获取字符串中字符 | >>>a[1] 'e' |
[ : ] | 截取字符串中的一部分 | >>>a[1:4] 'ell' |
in | 成员运算符 - 如果字符串中包含给定的字符返回 True | >>>"H" in a True |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True | >>>"M" not in a True |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 | >>>print r'\n' \n >>> print R'\n' \n |
% | 格式字符串 | 请看上面的格式化 |
5、转义字符:
转义字符 | 描述 |
---|---|
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\' | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,yy代表的字符,例如:\o12代表换行 |
\xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出 |
6、字符串函数:
方法 | 描述 |
---|---|
把字符串的第一个字符大写 | |
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 | |
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 | |
把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。 | |
检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 | |
格式化字符串 | |
跟find()方法一样,只不过如果str不在 string中会报一个异常. | |
如果 string 至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False | |
如果 string 至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False | |
如果 string 只包含十进制数字则返回 True 否则返回 False. | |
如果 string 只包含数字则返回 True 否则返回 False. | |
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False | |
如果 string 中只包含数字字符,则返回 True,否则返回 False | |
如果 string 中只包含空格,则返回 True,否则返回 False. | |
如果 string 是标题化的(见 title())则返回 True,否则返回 False | |
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False | |
以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 | |
返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 | |
转换 string 中所有大写字符为小写. | |
截掉 string 左边的空格 | |
返回字符串 str 中最大的字母。 | |
返回字符串 str 中最小的字母。 | |
有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string. | |
把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次. | |
类似于 find()函数,不过是从右边开始查找. | |
类似于 index(),不过是从右边开始. | |
返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 | |
类似于 partition()函数,不过是从右边开始查找 | |
删除 string 字符串末尾的空格. | |
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 | |
检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. | |
在 string 上执行 lstrip()和 rstrip() | |
翻转 string 中的大小写 | |
返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) | |
根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 del 参数中 | |
转换 string 中的小写字母为大写 | |
返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0 |
三、序列
序列是Python中最基本的数据结构,Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
四、列表:
1、特点:
-
列表是可变的序列,与元组区别(元组是不可变序列);
-
列表的数据项可以具有不同的类型;
2、创建:
只要把都好分割的不同数据项使用方括号(中括号)括起来即可。如下:
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
3、访问:
- 索引 :[头下标:尾下标] (例如:list[0]),利用索引,我们就可以用切片:(比如:list[2:5]),注意:从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾(若头下标为空则表示取到头,反之则为取到尾)。
4、Python列表函数:
序号 | 函数 |
---|---|
cmp(list1, list2) | 比较两个列表的元素 |
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(seq) | 将元组转换为列表 |
tuple(seq) | 将列表转换为元组。 |
5、Python列表方法:
序号 | 方法 |
---|---|
list.append(obj) | 在列表末尾添加新的对象(一般追加一个元素) |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) | 将对象插入列表 |
list.pop([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort(cmp=None, key=None, reverse=False) | 对原列表进行排序 |
注意:remove()与del与pop()的区别:
a=[1,2,3,4,5,6,2]
a.remove(a[5])
print(a)
输出:
[1, 2, 3, 4, 5, 2]
remove:移除列表中某个值的第一个匹配项。所以remove(a)中a必定是列表中的一个值。
a=[1,2,3,5,4,2,6]
del(a[5])
print(a)
输出:[1, 2, 3, 5, 4, 6]
del 删除是按索引来的,索引起始位置为 0。pop()也是一样,但pop()有默认方法,就是删除最后一个元素。
这里再介绍一种清空列表中的多项空值:
test = ['a','','b','','c','','']
test = [i for i in test if i != '']
print(test)
那这题呢?
m=[4,5,6,73,4,4,4,4,2],删除2,删除所有的4
六、元组
1、元组也是属于序列的一种,但它与列表有区别:
-
元组使用小括号,列表使用方括号
-
元组不可变,列表可变
2、创建元组:
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
当元组只包含一个元素时,需要在第一个元素后面加上逗号。例如:
tup = (50,)
若有任意无符号的对象,以逗号隔开,默认为元组。例如:
print 'abc', -4.24e93, 18+6.6j, 'xyz'
x, y = 1, 2
print "Value of x , y : ", x,y
3、修改元组:
元组中序列中不可变的,但我们依然可以修改元组,利用元组的算术运算(元组符合序列的算术运算),比如元组的组合,也就是说我们可以利用元组的截取将元组重组或增加(但不是相减)。例如:
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 创建一个新的元组
tup3 = tup1 + tup2
print tup3
输出:
(12, 34.56, 'abc', 'xyz')
元组中的元素不允许删除,但可以用del删除整个语句,还可以修改二级后的元组、列表或字典。例如:
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
tu[1][2]["k2"].append("seven")
print(tu[1][2]["k2"])
七、字典
1、含义:
字典是另一种可变容器模型,且可储存任意类型对象。字典的每一个键值对用冒号分割,每个键值对之间用逗号分隔,整个字典在花括号{}中,格式如下:
dict = {key1 : value1, key2 : value2 }
注意:
- 键一般是唯一的,如果出现重复,那么最后的一个键值对会替换前面的。但值不需要唯一。
- 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组,列表就不行。
2、访问:
把键放入方括号。(若用字典里没有的键访问数据,会输出错误)例如:
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict['Name']: ", dict['Name']
print "dict['Age']: ", dict['Age']
3、修改字典:
向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对。(注意这里跟访问的区别)
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8 # 更新
dict['School'] = "RUNOOB" # 添加
print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']
4、删除字典元素:
能删单一的元素也能清空字典,清空只需一项操作。
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name'] # 删除键是'Name'的条目
dict.clear() # 清空词典所有条目
del dict # 删除词典,删除后的字典不存在,之后便不能访问它
5、字典内置方法:
序号 | 函数及描述 |
---|---|
dict.clear() | 删除字典内所有元素 |
dict.copy() | 返回一个字典的浅复制 |
dict.fromkeys(seq[, val]) | 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 |
dict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值,可比较访问中的中括号方法 |
dict.has_key(key) | 如果键在字典dict里返回true,否则返回false,可以用 in 和 not in 替代 |
dict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
dict.keys() | 以列表返回一个字典所有的键 |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
dict.values() | 以列表返回字典中的所有值 |
pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
popitem() | 随机返回并删除字典中的一对键和值。 |
6、字典内置函数:
序号 | 函数及描述 |
---|---|
cmp(dict1, dict2) | 比较两个字典元素。 |
len(dict) | 计算字典元素个数,即键的总数。 |
str(dict) | 输出字典可打印的字符串表示。 |
type(variable) | 返回输入的变量类型,如果变量是字典就返回字典类型。 |