Python的内置数据结构

字符串、列表、元组

字符串
是一个个字符组成的有序序列,是字符的集合
使用单引号、双引号、三引号引住的字符序列
字符串是不可变对象
Python3,字符串都是Unicode类型
字符串元素访问,使用下标
字符串支持使用索引访问
sql=’select *from user where name=tom’
sql[4]
有序的字符集合,字符序列
可以迭代
lst = list(sql)
字符串join连接 *
“string”.join(iterable) 
使用string来对iterable这个可迭代对象里面的元素进行连接
    将可迭代对象连接起来,使用string作为分隔符
    可迭代对象本身都是字符串
    返回一个新的字符串
字符串+连接
使用+连接字符串,返回一个新的字符串
字符串分割
字符串分割分为两类
1、split
将字符串按照指定分割符,分割成若干字符串,并返回列表
2、partition
将字符串按照指定字符分割2段,分割成首部、分隔符、尾部三个部分,返回的是元组
split分割
split(sep=None,maxsplit=-1)
从左至右进行分割
sep 指定分割的字符串,缺省情况下是空白字符作为分隔符
maxsplit:指定分割的次数,-1表示遍历整个字符串
 
rsplit(sep=None,maxsplit=-1)
从右至左进行分割
sep:指定分割的字符串,缺省情况下是以空白字符作为分割符、
maxsplit:指定分割的最大次数
 
splitlines(keepends)
按照行来进行分割
keepends指的是是否保留行分隔符
行分隔符包括\n,\r,\r\n等
keepends为空时,不保留
keepends是Ture时,保留行分隔符
 
字符串分割:
partition(sep)
从左至右,遇到分隔符就把字符串分割成两个部分,返回头部、分隔符、尾部组成的元组,如果没有分隔符,就返回头部、两个空元素组成的三元组
sep:分割字符串,必须指定
rpartiton(sep)
从右至左
 
字符串的大小写:
upper()
lower()
swapcase():交互大小写
 
字符串排版
title():标题每个单词都大写
capitalize():首个单词大写
center(width,[fillchar]):width 打印宽度 fillchar 填充的字符
zfill(width)width:打印宽度,居右,左边用0 进行填充
ljust:左对齐
rjust:右对齐
字符串修改
replace(old,new[count])
字符串中找到匹配的字符串,替换成新的字符,返回一个新的字符串
count:表示替换几次,不指定就是全部替换
字符串修改
strip([chars])
从字符串两端,去除指定的字符集chars中的所有字符
为空,默认去除两边的空白字符
lstrip([chars])
从左至右
rstrip([chars])
从右至左
字符串的查找
find(sub[,start[,end]]) – int
在指定区间内从左至右查找字串sub,并返回索引,如果没有找到返回-1
rfind:从右至左进行查找
index(sub,start[,end])-int
在指定区间内从左至右进行查找,如果找到返回索引值,如果没有找到,抛出异常
rindex:从右至左进行查找
时间复杂度:
index和count方法都是O(n)
随着数据量的增大,效率下降
len()
返回字符串的长度,即字符的个数
字符串的判断
endswith(suffix,[,start[,end]])
在指定的区间内,查看是否已suffix结尾
startswith(prefix,[,start,[end]])
在指定区间内,查看是否已prefix开头
字符串判断is系列,返回的是bool型
isalnum()是否由字母和数字组成
isalpha()是否由字母组成
isdigit()是否全部是数字
islower()是否都是小写
isupper()是否全部是大写
isspace()是否只包含空白字符
字符串格式化
format函数格式化字符串
“{}{xxx}”.format(*args,**kwargs) ->str
args是位置参数,是一个元组
花括号表示占位符
{}表示按照顺序匹配的位置参数,{n}表示位置参数索引为n的值
{{}}表示花括号
元组tuple
一个有序的元素的集合
使用小括号进行表示
元组是不可变对象
元组的定义 初始化
定义
    tuple()-空的元组
    tuple(iterable)括号里面可以是可迭代对象
元组元素的访问
支持正负索引,正索引从0开始,负索引从-1开始
正负索引不可以越界
元组查询
index(value,[start,[stop]])
查询某个值得索引,匹配到第一个元素立即返回
count(value)
查询value值在元组的个数
以上由于数据量的增大,效率会变得很慢,所以时间复杂度是O(n)
len(tuple)
元组的长度
元组是只读的,不可以进行修改
命名元组namedtuple
namedtuple(typename,field_names)
命名元组,返回一个元组的子类,并定义字段
from collections import namedtuple
student = namedtuple(‘student’,’name,age’)
tom=student(‘tom’,20)
tom.age
20
类型转换
int(x):返回一个整数
float(x):返回一个浮点数
complex(x):返回一个复数
bool(x):返回布尔值
数字处理函数
round():四舍六入,5凑偶,意思:小数点后面小于4的值舍掉,大于6的向前进一位,如果小数点后面是5,后面有有效数字,向前进一,如果没有有效数字,离他最近最近的那个数如果是偶数,舍掉,如果是奇数向前进一位
math模块、floor()、ceil()                floor():向下取整,ceil():向上取整
//:整除,向下取整
min():取最小值
max():取最大值
pow(x,y)  x**y
math.sqrt():平方根
进制函数,返回值是字符串
bin()
oct()
hex()
类型判断
type():返回的是类型,而不是字符串,包含隐式转换
isinstance(obj.class_or_tuple):返回布尔型,判断obj是不是属于class或者tuple
列表
列表内的元素有顺序,可以使用索引
是线性的数据结构
使用[]表示
列表可以在任何位置进行数据的提取
列表是可变类型的
queue:队列
队列是线性的数据结构,但是它只能在首部和尾部进行拿取数取数据,可以是先进先出,也可以是后进先出
链表
类似手拉手的类型,它的元素在内存中是随机排列的,一个元素可以知道下一个元素的地址
stack:
类似叠盘子的模型,它是后进先出
列表的定义以及初始化
list():定义一个空的列表
list():括号里面可一个是一个可迭代对象
列表不用定义大小
lst=list():定义一个空的列表
lst=[]
lst=list(range(5))
 
列表的索引访问
正索引:从左至右,索引从0开始
负索引:从右至左,索引从-1开始
正负索引都不可以越界,负责会引起indexErrors
列表通过索引进行访问
list[index]
列表的查询
index(value,[start,stop]):
通过列表内的元素值value来进行查找索引值,其时间复杂度为O(n),
count(value)
返回列表中匹配value的次数,时间复杂度是O(n)
随着列表的数据量变大,而效率下降
len():可以返回列表元素的个数
列表元素的修改:
通过索引进行修改,list[index]=value
索引不要越界
列表元素的增加,插入元素
append(object),时间复杂度是O(1)
insert(index,object):在指定索引index插入元素object,时间复杂度是O(n),如果索引超过上界,在尾部追加,超过下届,在首部追加
extend(iteratable):将可迭代的元素追加至列表中,就地修改
+ :实现列表的链接操作,产生新的列表,原来的列表保持不变
*:实现列表的重复操作,将本列表元素重复n次,返回一个新的列表
列表*重复的坑:类似这样的双分支结构要注意
x=[[1,2,3]]*3
是将列表里面的引用计数重复了3次,实际上都指向同一个
x=[0][1]=200将列表所有元素都修改
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
x[0][1]=20
x
[[1, 20, 3], [1, 20, 3], [1, 20, 3]]
列表的删除元素
remove(value) :从左至右查找到第一个匹配的value,移除该元素,时间复杂度是O(n),
pop([index]):不指定index会从尾部进行弹出元素,指定索引,就会在指定的索引出弹出一个元素,弹出的value可以付给一个变量
pop不加index是的时间复杂度是O(1),加index时间复杂度是O(n)
clear():清楚列表所有元素,剩下一个空列表,在清除的时候要考虑gc的影响
 
列表的其他操作:
reverse():
将列表的元素进行翻转
sort(key=None,reverse=False):对列表的元素进行排序,默认是升序,reverse=True时升序,reverse=False是降序
其中key是一个函数,指定key如何进行排序
in:成员列表
for i in [list]
列表赋值
当将一个列表赋值给另一个列表,赋值的是引用地址,当一个列表发生修改时,另一个列表也会发生修改,类似两个地址指向同一个对象
copy() ->list
 shadow copy返回一个新的列表
 是浅拷贝,遇到引用类型,只是复制了一个引用
列表的双分支结构,复制的是一个引用
深拷贝:重新定义个引用地址和对象,与原来的没有关系,修改其中一个并不会影响另一个
    copy提供了deepcopy
    import copy
    copy.deepcopy()
随机数
random模块
randint(a,b)返回[a,b]之间的整数
choice(seq)从非空序列随机挑选一个元素
randrange([start,]stop[,step])从制定范围,按照基数递增的集合获取一个随机数
random.shuffle(list)->就地打乱列表元素
sample(population,k)从样本空间中随机选取k个元素,作为一个新的列表
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/93913

(0)
SignalSignal
上一篇 2018-03-31
下一篇 2018-03-31

相关推荐