序列
列表、元组、集合、字典和字符串。
序列的共同特性:
索引 :正数索引从0开始,负数索引从-1开始。
切片 :sname[start : end : step]
序列相加
序列乘法
检查某个元素是否是序列成员 :<value> in <sequence> , <value> not in <sequence>
计算序列长度、最大和最小值 :len(<sequence>) 、max(<sequence>) 、min(<sequence>)
求和、排序、反向序列、转换列表 : sum() 、sorted() 、reversed() 、list()
序列组合为一个索引序列 :enumerate() 多用在for循环中。
列表
创建 :
1. listname = [element1, element2, element3, … , elementN]
2. listname = []
3. list(<data>)
删除列表 :del listname
访问列表元素 :listname[N]
遍历列表 :
for <item> in <listname>:
<代码块>
同时输出索引值和元素内容:
for <index>,<item> in enumerate(<listname>):
<代码块>
添加、修改和删除列表元素:
1. 添加元素:listname.append(obj) listname.insert(index,obj) listname.extend(objs)
2. 修改元素:listname[N]=<index>
3. 删除元素:del listname[N] listname.remove(<value>)
对列表进行统计和计算
1. 获取元素出现的次数:listname.count(<value>)
2. 获取指定元素首次出现的下标:listname.index(<value>)
3. 统计数值列表的元素和:sum(listname[,start])
排序
1. listname.sort(key=None, reverse=False)
对中文支持不好,不能直接调用sort
2. 使用内置sorted():sorted(listname, key=None, reverse=False)
列表推导式
1. 生成指定范围的数值列表:list = [生成列表表达式 for var in range]
2. 根据列表生成指定需求的列表:list = [生成列表表达式 for var in list]
3. 从列表中选择符合条件的元素组成新列表:list = [生成列表表达式 for var in list if condition]
二维列表
创建方式:
1. listname = [[…],[…],[…]…]
2. for嵌套生成
3. 列表推导式创建
访问方法:listname[index1][index2]
元组
不可变序列。但是可以通过将两个元组连接来实现添加元素的效果。元组的访问速度更快。
*元组可以当作字典的键。
创建: varname = (e1, e2, … , en)
varname = tuple()
*一个元素的元组: (e1,)
空元组: ()
删除: del varname
访问: varname[N]
遍历: for循环和enumerate()函数结合
for index,item in enumerate(varname)
<代码块>
修改: 可以改变变量的引用达到修改元素的效果。
元组推导式: 同列表推导式,把方括号改成圆括号。
字典
相当于Java中的Map,存储的数据是无序的。可以任意嵌套。
创建:varname = {‘key1′:’value1′,’key2′:’value2′,…,’keyn’,’valuen’}
varname = dict(zip(list1,list2)) #如果list1和list2长度不同
varname = dict(key1=value1,key2=value2,…keyn=valuen)
varname = {tuple:list} #作为键必须是元组
空字典:{}
空值字典:dict.fromkeys(list)
删除:del varname
varname.clear() #清除字典中所有元素
varname.pop() #删除并返回指定的键
varname.popitem() #删除并返回字典中的一个元素
访问:varname[key]
varname.get(key[,default])
遍历:
for item in varname.items()
<代码块>
修改元素:
varname[key]=value #如果存在就会修改,如果不存在就会新增
删除元素:
del varname[key]
字典推导式:
import random
varname = {i:random.randint(10,100) for i in range(1,5)}
集合
相当于Java中的Set,可以保证元素不重复,有可变集合(set)和不可变集合(frozenset)两种。
创建:
varname = {e1,e2,…,en}
varname = set(<iteration>)
*空集合只能用 set(),不能用{},{}认为是空的字典。
添加元素:varname.add(<e>)
删除元素:
删除指定元素:varname.remove(<e>)
删除一个元素:varname.pop()
清空集合:varname.clear()
集合运算
交集: &
并集: |
差集: –
对称差集: ^
字符串
拼接: <string1>+<string2>
计算长度: len(<string>)
分割、合并字符串: string.split(<分隔符>,<最大分割次数>) str.join(<可迭代对象>)
分析统计:
统计次数: count()
检索是否包含指定子串:
str.find(sub[, start[, end]])
str.rfind 从右开始检索
str.index(sub[, start[, end]])
检索是否以指定字符串开头、结尾:
str.startswith(prefix[, start[, end]])
str.endswith(suffix[, start[, end]])
字母大小写转换:
str.lower() str.upper()
去除空格或者特殊字符:
str.strip([chars]) str.lstrip([chars]) str.rstrip([chars])
格式化字符串
‘%[-][+][0][m][.n]格式化字符’%exp
常用格式化字符:
%s : 字符串(str());%r : 字符串(repr());%c : 单个字符;%o : 八进制整数;%x : 十六进制整数;
%d或者%i : 十进制整数;%f或者%F : 浮点数;%e : 指数(底为e);%E : 指数(底为E);%% : 字符%;
使用对象的format()方法:
str.format(args)
str : {[index][:[[fill]align][sign][#][width][.precision][type]]}
fill : 空白处填充的字符;
align : “<“左对齐,”>”右对齐, “^”居中;
sign : 留空:正数加空格,负数加负号;+:正数加正好;-:正数不加空格;
.precision : 保留小数的位数;
type : 类型(同常用格式化字符,去掉%即可)。
编码转换:
编码:str.encode([encoding=<coding>][,errors=<function>])
解码:str.decode([encoding=<coding>][,errors=<function>])
coding: utf-8, gb2312
function: strict抛出异常,ignore忽略非法字符,replace用”?”代替非法字符,xmlcharrefreplace使用XML的字符引用。
正则表达式
正则表达式语法
用re模块实现正则表达式的操作:
匹配:
re.match(pattern, string, [flags]) 返回match对象,或者None
flags:A(ASCII):\w \W \b \B \d \D \s \S只进行ASCII匹配;I(IGNORECASE):不区分大小写;M(MULTLINE):将^和$包括整个字符串的开始和结尾;S(DOTALL):用.匹配所有字符,包括换行符;X(VERBOSE):忽略模式字符串中未转义的空格和注释;
re.search(pattern, string, [flags]) 返回match对象,或者None
re.findall(pattern, string, [flags]) 返回列表
替换字符串:
re.sub(pattern, repl, string, count, flags)
分割字符串:
re.split(pattern, string, [maxsplit], [flags])