基本类型包括:数字型(int、float、complex)、布尔型(0、1、空值、True、False)
容器包括:序列(string、list、tuple)、映射(dict),以及集 set(). 其中 序列都是有序的,字典默认是无序的。有序字典为 OrderedDict 类.
序列之通用方法
索引取值、赋值list_obj[index]
# ✅
a = ['hello']
print(a[0]) ### 输出索引位 0 的值,即第 0 位的值 “hello”
print(a[-1])
b = ['h', 'e', 'l', 'l', 'o']
a[0] = 'y'
print(a) ### 输出结果为 ['y', 'e', 'l', 'l', 'o']
# ❌
a = ['hello']
print(a[1]) ### 索引越界报错
获取索引位index()
通过形如 a[1] ,假设 a 是一个列表,可以获取到索引位 1 上的值 相反地,获取列表对象具体值第一次出现的索引位,可以通过 index() 方法
a = ['hello', 'world', 'hello']
a.index('hello') ### 输出了索引位 0
切片拷贝 [:]
在有些情况下,我们不希望改动原列表对象的值,可以借助索引取值做全拷贝
a = [1, 2, 3]
b = a[:] ### 切片表达式[:] 意为以 [start_index : end_index : step=1] 进行全量复制
c = a ### 同一对象判断 a is c 将为真
a[0] = 9
print(a, b) ### a为 [9, 2, 3], b为 [1, 2, 3]
成员资格 in
运算符 in 用于检查指定对象是否是序列或其他集合的成员
a = "checkout"
'o' in a ### True
'z' in a ### False
拼接 +
拼接必须是同样的数据类型
# ✅
a = ['1', '2']
b = [3]
c = a + b
print(a, b, c) ### 拼接后是一个新的副本,a、b 并没有被修改
# ❌
a = ['1', '2']
b = 3
print(a + b) ### 此时会报错。因为 a 的类型是列表,b 为数值型(整型)
获取序列长度len()
a = ['hello']
b = ['h', 'e', 'l', 'l', 'o']
print(len(a), len(b)) ### 输出的长度为 1 和 5
序列之 List 列表
形如由函数
list()
转换或声明的,或由方括号[]
包裹的有序对象即列表 列表是有限长度,索引位从 0 开始,-1表示从右开始;当索引越界时将抛错 列表是可变序列,且与 Java 等语言中的数组不同,Python列表可以存储不同类型的数据
定义列表
# 将字符串序列转化成列表
v = "hello"
a = list(v)
# 声明一个列表
b = list()
c = []
# 声明一个长度 10 的空列表
d = [None]*10
常用方法与 API
追加append()
append() 用于将一个对象附加到列表末尾,方法为原地修改,且不返回值 (严格意义来说返回了 None)
a = ['a', 1]
a.append(3) ### 此时 a == ['a', 1, 3]
扩展extend()
extend() 能够同时将多个值附加到列表末尾,方法为原地修改
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
插入insert()
与删除pop()
、remove()
方法 insert 用于将一个对象值插入列表 方法 pop 用于将列表对应的元素,默认为末端元素。删除后将返回该删除的元素 方法 remove 用于删除第一个指定值的元素,且为原地操作,同时不返回结果
a = [1,2,4,5,1,1]
a.insert(2,'three') ### a 为 [1, 2, 'three', 4, 5, 1, 1]
a.pop() ### 返回为末端删除的元素 1
a.remove(1) ### a 为 [2, 'three', 4, 5, 1]
a.pop(1) ### 返回为删除第1索引位的元素 'three'
排序 sort()
、sorted(List)
与反序 reverse()
方法 sort 为原地操作,将列表根据元素的值进行排序,无返回 方法 sorted 则会创建序列对象副本并做排序,并总返回一个列表对象 方法 reverse 为原地操作,按相反顺序排列列表元素,无返回
a = [1, 3, 2, 5]
a.sort() ### a 为 [1, 2, 3, 5]
a.reverse() ### a 为 [5, 3, 2, 1]
b = 'hello'
sorted(b) ### 返回一个列表对象副本 ['e', 'h', 'l', 'l', 'o'], 字符串序列对象b不变
序列之 Tuple 元组
形如由函数
tuple()
转换或声明的,或由圆括号()
包裹的有序对象 元组具有不可变性,但如果元组内的元素本身是可变的,可以完成该元素的修改
定义元组
a = () ### 定义空元组
b = ('xyz',) ### 定义只有一个元素且值为'xyz'的元组
tuple('xyz') ### 将字符串 xyz 转换为元组, 变成了 ('x', 'y', 'z')
元组不可变性
序列之 String 字符串
形如 a=’1’, b=’Hello World’, str(1), str([1, 2, 3]) 等,由单/双引号成对地包裹的内容即字符串 String字符串是不可变序列
格式化方法
最佳性能版
py3.8+ 支持 转换说明符
F
\f
To use formatted string literals, begin a string with f or F before the opening quotation mark or triple quotation mark. Inside this string, you can write a Python expression between { and } characters that can refer to variables or literal values.
>>> year = 2016
>>> event = 'Referendum'
>>> f'Results of the {year} {event}'
'Results of the 2016 Referendum'
简化版
转换说明符 %
- %s 格式化为字符串
- %d 格式化为十进制数
- %.2f 格式化为包含两位小数的浮点数
```python
print(“hell, %s ! Today is very %s” % (‘Boy’, ‘Nice’)) hell, Boy ! Today is very Nice
print(“hell, %s ! Today is %dth day” % (‘Boy’, 6)) hell, Boy ! Today is 6th day ```
模板字符串
Unix Shell 风格 这个是耗时最久的
>>> from string import Template
>>> tmpl = Template("Hello, $who! $what enough for ya?")
>>> tmpl.substitute(who="Mars", what="Dusty")
'Hello, Mars! Dusty enough for ya?'
标准格式化format()
可以通过索引或关键字来设置
# 索引的方式
>>> "{}, {} and {}".format("first", "second", "third")
'first, second and third'
>>> "{2}, {1} and {0}".format("first", "second", "third")
'third, second and first'
# 关键字的方式
>>> from math import pi
>>> "{name} is approximately {value:.2f}.".format(value=pi, name="π")
'π is approximately 3.14'
部分API
拼接 +
、join()
必须都是字符串类型
>>> a=['1','2','3']
>>> '+'.join(a)
'1+2+3'
>>> b='123'
>>> '-'.join(b)
'1-2-3'
>>> c='1,2,3'
>>> '-'.join(c)
'1-,-2-,-3'
拆解 split()
匹配到指定的字符串则以列表返回结果
>>> a='1,2,3'
>>> a.split(',')
['1', '2', '3']
全局替换 replace()
将指定子串全部都替换为另一个字符串,并返回替换后的结果
>>> a='123=abc'
>>> a.replace('=','')
'123abc'
查找索引位 find()
方法find在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回-1
测试示例
def string_api():
text = "this is one paragrapha,包括了一些符合对如()[],也有一些特殊符号!@#$"
print(text.title())
print('/'.join(text))
print(text.split(',', 1))
print(text.replace("is", "展示了"))
print(text.find('!'))
print(text[:6])
""" 输出分别如下
This Is One Paragrapha,包括了一些符合对如()[],也有一些特殊符号!@#$
t/h/i/s/ /i/s/ /o/n/e/ /p/a/r/a/g/r/a/p/h/a/,/包/括/了/一/些/符/合/对/如/(/)/[/]/,/也/有/一/些/特/殊/符/号/!/@/#/$
['this is one paragrapha', '包括了一些符合对如()[],也有一些特殊符号!@#$']
th展示了 展示了 one paragrapha,包括了一些符合对如()[],也有一些特殊符号!@#$
45
this i
"""
映射之 dict 字典
一种可以通过名称来访问各个值的数据结构 值不按顺序排列,而是存储在键下。键可能是数、字符串或元组,即任意不可变的类型作为键 字典的键具备唯一性 形如
{'k1': 'v1', 'k2': 'v2'}
即字典,空字典即{}
dict()
即意将某对象转换成字典类型
基本操作
形如
len(d)
返回字典d包含的项(键-值对)数d[k]
返回与键k相关联的值。如果 k 不存在,则报错d[k] = v
将值v关联到键k。如果k不存在,则创建一个 k 并关联值 vdel d[k]
删除键为k的项k in d
检查字典d是否包含键为k的项关于字典的无序性
字典的无序是指数据存进字典的顺序跟取出字典的顺序不一致
from collections import OrderedDict
则是使用有序字典 值得注意的是,根据 Python 版本的不同,比如 python_3.7及以上 dict 是有序的(这个在官方某处隐晦提及,可以自测)
常用方法与 API
class DictAction:
def __init__(self):
pass
@staticmethod
def dict_formatter():
phone_book = {'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
# 字符串格式化用于字典
res = "Cecil's phone number is {Cecil}.".format_map(phone_book)
print(res) ### 输出为 "Cecil's phone number is 3258."
@staticmethod
def dict_items_exchange():
a = {'1': 'a', '2': 'b', '3': 'c'}
b = {}
for k, v in a.items():
b[v] = k ### 这个是序列解包的用法,可以快速交换值
print(b) ### 输出为 {'a': '1', 'b': '2', 'c': '3'}
# 1 dict.clear()
# 删除字典内所有元素
# 2 dict.copy()
# 返回一个字典的浅复制。 深复制需要 from copy import deepcopy
# 3 dict.fromkeys(seq[, val])
# 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
# 例如 dict.fromkeys(['name', 'age'], '(unknown)')
# >>> {'age': '(unknown)', 'name': ('unknown')}
# 4 dict.get(key, default=None)
# 返回指定键的值,如果值不在字典中返回default值
# 5 dict.has_key(key)
# 如果键在字典dict里返回true,否则返回false
# 6 dict.items()
# 以列表返回可遍历的(键, 值) 元组数组
# 7 dict.keys()
# 以列表返回一个字典所有的键
# 8 dict.setdefault(key, default=None)
# 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
# 9 dict.update(dict2)
# 把字典dict2的键/值对更新到dict里
# 10 dict.values()
# 以列表返回字典中的所有值
# 11 pop(key[,default])
# 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值
# 12 popitem()
# 随机返回并删除字典中的一对键和值
if __name__ == '__main__':
d = DictAction()
d.dict_items_exchange()