内置函数
enumerate
enumerate(list[,start=0])
:遍历list
,并索引
my_list = ['apple', 'banana', 'grapes', 'pear']
for i, value in enumerate(my_list, 1):
print(i, value)
输出:
(1, 'apple')
(2, 'banana')
(3, 'grapes')
(4, 'pear')
divmod(x,y)
如果 x
为 int
,返回x÷y
的商和余数组成的元组,(x//y, x%y)
。
如果 x
为 float
,则返回 (math.floor(x / y), x%y)
。
可以以此很方便的形成二维数组:
>>>[divmod(i, 3) for i in range(9)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
短路求值
三元运算
利用 python 逻辑运算的短路求值特性,我们可以实现python不支持的三元运算符 bool ? a : b
:
bool and a or b # 其中要求 a, b 为真
当然有更pythonic
的实现方法:
a if bool else b
and 与 or 优先级
True or True and False #=> True
造成结果为True
的原因是因为短路求值,不是因为存在臆想中的优先级问题--True or (True and False),
or 和
and` 一起使用,遵循自左向右计算原则。
参见:短路求值
装饰器
示例1:
table = [i * i for i in range(5)]
或:
def call(*argv, **kwargs):
def call_fn(fn):
return fn(*argv, **kwargs)
return call_fn
@call(5)
def table(n):
value = []
for i in range(n):
value.append(i*i)
return value
或:
@list
@call(5)
def table(n):
for i in range(n):
yield i * i
结果:
len(table), table[3] #=> (5, 9)
数组(List)
转置矩阵
m = [[1,2],[3,4]]
zip(*m)
碾平list
a = [1, 2, [3, 4], [[5, 6], [7, 8]]]
flatten = lambda x: [y for l in x for y in flatten(l)] \
if type(x) is list else [x]
flatten(a)
# [1,2,3,4,5,6,7,8]
list分组
a=[3, 8, 9, 4, 1, 10, 6, 7, 2, 5]
print([a[i:i+3] for i in range(0,len(a),3)])
# [[3, 8, 9], [4, 1, 10], [6, 7, 2], [5]]
字典(Dict)
key,value互换
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
{v: k for k, v in m.items()}
# {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
Dict.get()
dict.get(key[, default=None])
: 如果key
存在,返回dict[key]
,否则返回default
,default
默认值为None
。相比较,dict['key']
只能获取 dict
中存在的key
的值,如果不存在则触发 KeyError
。利用此方法,在对字典进行某些运算时会更优雅:
if key not in dct:
dct[key] = 0
dct[key] = dct[key] + 1
dct[key] = dct.get(key, 0) + 1
d = {
'a': 1,
'b': 2,
}
d.get('c', 3) #=> 3
Dict.setdefault()
Dict.setdefault(key, default)
:如果存在,返回 dct[key]
,不存在则把 dct[key]
设为 default
并返回它。当一个默认的值是一个你可以修改的对象的时候这是很有用的。
dct = {}
for key, value in data:
if key in dct:
dct[key].append(value)
else:
dct[key] = [value]
dct = {}
for (key, value) in data:
group = dct.setdefault(key, []) # key might exist already
group.append(value)
参见:Python:字典的剧本
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。