您的位置:首页 > 其它

Iterator and Generator-2

2020-11-17 00:31 751 查看

lambda表达式
匿名函数

lambda params:expression

params : 可选参数,逗号分割变量名

expression:表达式,可以用条件语句,没有return或yield

用法:

# 简单计算:lambda x: x*2
# 添加条件: lambda x :True if x > 8 else False
# 多个参数 lambda x, y : x+y
# 用作排序: users.sort(key = lambda x(x[0], x[1]))
# 默认字典:①defaultdic(lambda:0)
# ② defaultdict(lambda:'bj')
# ③ defaultdic(lambda :(0, 0))
# 用作参数:① filter ② map
# 要点:① 语法糖,用来创建函数对象  ② 表达式不要太复杂

f = lambda x :x*2
f(3)
6
f = lambda x : True if x > 8 else False # 在if前面的是要返回的值
f(3)
False
f(9)
True
f = lambda x, y : x + y
f(8,9)
17
users = [('coop', 23), ('lilei', 26), ('hmm', 15), ('zhangsan', 40)]
users.sort(key=lambda x: (x[0],x[1])) # sort中有参数key,按照key的值进行排序,以x[0]

的值为key # 按照字母顺序排序x[0]指出了是coop,lilei,hmm等

users
[('coop', 23), ('hmm', 15), ('lilei', 26), ('zhangsan', 40)]
users.sort(key=lambda x:(x[1],x[0])) # 按数字大小排序
users
[('hmm', 15), ('coop', 23), ('lilei', 26), ('zhangsan', 40)]
from collections import defaultdict
d = defaultdict(lambda :0) # 默认赋值 等同于defaultdict(lambda:int)
只写出key,而没有指定value,默认从int中取值,即0,而不限与0
d['a']
0
d
defaultdict(<function main.<lambda>()>, {'a': 0})
d['b']
0
d
defaultdict(<function main.<lambda>()>, {'a': 0, 'b': 0})
d['c'] = 'coop'
d
defaultdict(<function main.<lambda>()>, {'a': 0, 'b': 0, 'c': 'coop'})
city = defaultdict(lambda : 'bj')
city
defaultdict(<function main.<lambda>()>, {})
city['shanghai']
'bj'
city
defaultdict(<function main.<lambda>()>, {'shanghai': 'bj'})
city['coop']
'bj'
city
defaultdict(<function main.<lambda>()>, {'shanghai': 'bj', 'coop': 'bj'})
point = defaultdict(lambda : (0, 0))
point[1]
(0, 0)
point[0]
(0, 0)
point['pp'] = (1,2)
point
defaultdict(<function main.<lambda>()>,
{1: (0, 0), 0: (0, 0), 'pp': (1, 2)})
有些代码----一行搞定

all(iterable) Return True if all elements of the iterable are true (or if the iterable is empty). 都是真

any(iterable)Return True if any element of the iterable is true. If the iterable is empty, return False 任意

min

max

sum

reversed

sorted

zip # 对应合并

[]列表 列表推到是

()生成器 生成器

{k, v} 字典推倒

set/{} 去重

if 三元操作符 xx if x else y

enumerate 返回枚举,带索引

m = [1,2,3,0]
all(m) # 可能是函数等
"""Signature: all(iterable, /)
Docstring:
Return True if bool(x) is True for all values x in the iterable
括号里面必须是可迭代的对象,如果可迭代对象里面的每一个都是True,则返回True
"""
False
m = [1,2,3,4,5]
all(m)
True
def f1():
return True
def f2():
return False
def f3():
return True
all([f1(), f2(), f3()]) # [],可迭代的对象
False

any

any([f1(), f2(), f3()])
True
m
[1, 2, 3, 4, 5]
min(m)
1
max(m)
5
sum(m)
"""Signature: sum(iterable, start=0, /)
Docstring:
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
"""
"Signature: sum(iterable, start=0, /)\nDocstring:\nReturn the sum of a 'start' value (default: 0) plus an iterable of numbers\n"
sum(m)
15
reversed(m)
"""Init signature: reversed(self, /, *args, **kwargs)
Docstring:
reversed(sequence) -> reverse iterator over values of the sequence

Return a reverse iterator"""
'Init signature: reversed(self, /, *args, *kwargs)\nDocstring: \nreversed(sequence) -> reverse iterator over values of the sequence\n\nReturn a reverse iterator'
reversed(m)
<list_reverseiterator at 0x12fcd4c9d68>
for i in reversed(m):
print(i)
5
4
3
2
1
[i for i in reversed(m)]
[5, 4, 3, 2, 1]
[i for i in reversed(range(8))]
[7, 6, 5, 4, 3, 2, 1, 0]
m
[1, 2, 3, 4, 5]
m = [2,3,90,5,4,34,22,55]
m.sort()
m
[2, 3, 4, 5, 22, 34, 55, 90]
m = [2,3,90,5,4,34,22,55]
sorted(m)
[2, 3, 4, 5, 22, 34, 55, 90]
sorted?
"""Signature: sorted(iterable, /, , key=None, reverse=False)
Docstring:
Return a new list containing all items from the iterable in ascending order.

A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
Type: builtin_function_or_method"""
m
[2, 3, 90, 5, 4, 34, 22, 55]
sorted(m, reverse=False)
[2, 3, 4, 5, 22, 34, 55, 90]
sorted(m, reverse=True)
[90, 55, 34, 22, 5, 4, 3, 2]
m1 = [-9,-3,-5,-7,3,4,6]
sorted(m1)
[-9, -7, -5, -3, 3, 4, 6]
sorted(m1, key = abs)
[-3, 3, 4, -5, 6, -7, -9]
zip?
"""Init signature: zip(self, /, *args, **kwargs)
Docstring:
zip(iter1 [,iter2 [...]]) --> zip object

Return a zip object whose .next() method returns a tuple where
the i-th element comes from the i-th iterable argument. The .next()
method continues until the shortest iterable in the argument sequence
is exhausted and then it raises StopIteration."""
x = [1,2,4,5,6,7,8]
y = ['q','b','c','d','e']
zip(x,y)
<zip at 0x12fcd3fc4c8>
print(zip(x,y))
<zip object at 0x0000012FCD4C6CC8>
print(list(zip(x,y)))
[(1, 'q'), (2, 'b'), (4, 'c'), (5, 'd'), (6, 'e')]
print(dict(zip(x,y)))
{1: 'q', 2: 'b', 4: 'c', 5: 'd', 6: 'e'}
name = ['coop','hmm','lilei']
city = ['beijing','shanghai','shenzhen']
dict(zip(name,city))
{'coop': 'beijing', 'hmm': 'shanghai', 'lilei': 'shenzhen'}

列表推导式

[i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[i^2 for i in range(10)]
[2, 3, 0, 1, 6, 7, 4, 5, 10, 11]

生成器表达式()

(x3 for i in range(8))
<generator object <genexpr> at 0x0000012FCD4B73B8>
for y in (x
3 for x in range(8)):
print(y)
0
1
8
27
64
125
216
343

字典推导式

info = dict(zip(name, city))
info
{'coop': 'beijing', 'hmm': 'shanghai', 'lilei': 'shenzhen'}
info_new = {}
https://blog.csdn.net/shkfpwz
for k, v in info.items():
info_new[k] = v.upper()
print(info_new)
{'coop': 'BEIJING', 'hmm': 'SHANGHAI', 'lilei': 'SHENZHEN'}
{k:v.upper() for k, v in info.items()} # 与上面同样的效果
{'coop': 'BEIJING', 'hmm': 'SHANGHAI', 'lilei': 'SHENZHEN'}

去重set

s = [1,1,2,3,4,5,4,5,64,6,4,3,6]
set(s)
{1, 2, 3, 4, 5, 6, 64}
s
[1, 1, 2, 3, 4, 5, 4, 5, 64, 6, 4, 3, 6]
list(set(s))
[64, 1, 2, 3, 4, 5, 6]
三元操作符
if True:
pass
else:
pass
True if s =='a' else False
False
s
[1, 1, 2, 3, 4, 5, 4, 5, 64, 6, 4, 3, 6]
s = 'a'
True if s =='a' else False
True

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: