Python基础0226
字典
字典是二维的、无序的、多个元素的集合。
d[key] 取值
d.get(key,[True]) 可定义默认值,不存在的key不会报错,返回None
增加和修改元素
d[key] = var
删除元素
d.pop(key,[var]) 不定义默认值时删除不存在key时会报错
也可以使用 del 关键字
del d[key]
遍历词典
d.items()
for k, v in d.items():
print(k + " ==> " + v)
二叉树
d={}
d["root"]={}
d["root"]["left"]="left
d["root"]["right"]="right"
d
{'root': {'left': 'left', 'right': 'right'}}
列表解析
列表解析是Python重要的语法糖,它的速度比 for in 迭代速度要来的快。
基本语法
ret = [ expression for item in iterator ]
等价于
ret = []
for item in iterator:
ret.append(expression)
[ x + 1 for x in l ]
[ x + 1 for x in l if x %2 == 0 if x > 2 ] 多个 if 表示 and 关系
多个列表
[(x,y) for x in l1 for y in l2]
等价于
for x in l1:
for y in l2:
print((x,y))
生成集合
s={1,2,3,4}
{x + 1 for x in s }
{2, 3, 4, 5}
可迭代对象
{x + 1 for x in range(10)}
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
集合没有重复元素
{x + 1 for x in [2,2,2,2,2]}
{3}
生成字典
l1 = [1,2,3,4,5]
l2 = [5,4,3,2,1]
{ k:v for k in l1 for v in l2 }
{1: 1, 2: 1, 3: 1, 4: 1, 5: 1}
{k:v for k,v in [("a",1),("b",2)]}
{'a': 1, 'b': 2}
字符串
Python 2 和 Python 3 最大的差别就在于字符串。Python 2 中字符串是byte的有序序列,而Python 3 中字符串是unicode得有序序列。字符串是不可变对象,也是线性序列,因此支持下标和切片。
字符串格式化
Python 字符串支持两种方式格式化: print style 和 format。
print style
tempate % tuple (1)
template % dict (2)
1.template为带有一些标记的字符串,使用tuple中得元素一次填充
2.template为带有一些标记的字符串,使用dict中的values按key填充
'i love %s' % ("Python")
'i love Python'
'L love %(name)s' % {"name" : "Python" }
'L love Python'
'I love %s %s is my first lang' % ('Python','Python')
'I love Python Python is my first lang'
template的一般格式
%(key)flag conversion (1) (2) (3) (4)
-
% 开始
-
可选的(key)。如果指定了key,将从字典中换取对应的value,否则根据位置从元组中获取
-
可选的flag
-
必选的conversion
flag
- # #是数字的意思,表示字符所占宽度,变量字符不够默认使用空格填充
- 0 表示使用0填充,通常适用于数字
- - 左对齐
- + 右对齐
conversion
- d和i 表示整数
- o 八进制数
- x|X 小|大写的十六进制整数
- f|F 浮点数
- e|E 小|大写科学计数法
- g|G 同f,如果指数小于-4,同e|E
- c 字符 unicode 编码或者单字符串
- a 字符串,使用ascii函数转换
- r 字符串,使用repr函数转换
- s 字符串,使用str函数转换
format函数
template.formate(*args, **kwargs) (1) (2) (3) (4)
-
template 使用{}表示变量
-
{}或者{\d+}使用*args按顺序填充
-
{Key}使用**kwargs按key填充
-
Format String Syntax
'{0},{key}'.format("google",key="baidu")
'google,baidu'
字符串的常用操作
- 字符串连接
join函数
l = ["I","Love","You"]
'_'.join(l)
'I_Love_You'
等同于
ret = ""
count = 0
for i in l:
count +=1
ret += i
if count < len(l):
ret += '_'
print(ret)
I_Love_You
- 字符串分割
s.split()
s.rsplit('分隔符','分隔次数') 从右向左
s = "I Love Python"
s.split()
['I', 'Love', 'Python']
s = 'URL:http://www.baidu.com'
s.split(':',1)[1]
'http://www.baidu.com'
s.splitlines() 按行分割
这些操作都会生成一个新的列表
s.partition('分隔符') 分隔符左侧,分隔符,分隔符右侧
s = "googe"
s.partition('o')
('g', 'o', 'oge')
s.rpartition() 从右侧开始分割
这些操作都会生成一个元组
- 字符串修改
大小写
s.capitalize() 首行首字母大写
s.title() 首字母大写
s.lower() 全部小写
s.upper() 全部大写
s.swapcase() 大小写交换
字符填充
s.center() 中间对齐填充
s.ljust() 左对齐填充
s.rjust() 右对齐填充
s.zfill() 用 0 补齐位数
s.strip() 删除字符开始和结尾的 空格 换行符 制表符
s.rstrip() 删除右侧的 空格 换行符 制表符
s.lstrip() 删除左侧的 空格 换行符 制表符
字符判断
s.startswith("str") 是否以str开头
s.endswith("str") 是否以str结尾
s.is*() 是否是 * 类型
字符串查找替换
s.count('item') item 出现次数
s.find('item') item 的index序号,不存在返回 -1
s.rfind('item')
s.index('item') item 的index序号,不存在会报错
s.rindex('item')
s.replace('源','目标','次数') 替换找到的字符
str和bytes
Python3 中严格的区分了文本和二进制数据。文本数据使用str类型,底层实现是unicode编码;二进制数据使用bytes类型,底层是byte。str可以使用encode方法转换为bytes,bytes可以使用decode方法转化为str。由于清晰的区分文本和二进制,Python3解决了大多数Python2的编码问题。
s.encode() --> bytes
b.decode() --> str
socker 网络通信中,使用bytes传输数据。
可以参考廖雪峰教程字符编码章节

浙公网安备 33010602011771号