写点什么

python 高级函数补充

用户头像
若尘
关注
发布于: 2021 年 05 月 24 日
python 高级函数补充

高级函数补充

zip

  • 把两个可迭代内容生成一个可迭代的 tuple 元素类型组成的内容


# zip 案例l1 = [1,2,3,4,5]l2 = [11,22,33,44,55]
z = zip(l1, l2)
print(type(z))
for i in z: print(i)
复制代码


<class 'zip'>(1, 11)(2, 22)(3, 33)(4, 44)(5, 55)
复制代码


l1 = ["wangwang", "mingyue", "yyt"]l2 = [89, 23, 78]
z = zip(l1, l2)
for i in z: print(i) l3 = (i for i in z)print(l3)
复制代码


('wangwang', 89)('mingyue', 23)('yyt', 78)<generator object <genexpr> at 0x000001ED9F1F3ED0>
复制代码

enumerate

  • 跟 zip 功能比较像

  • 对可迭代对象里的每一元素,配上一个索引,然后索引和内容构成 tuple 类型


l1 = [11,22,33,44,55]
em = enumerate(l1)
l2 = [i for i in em]print(l2)
复制代码


[(0, 11), (1, 22), (2, 33), (3, 44), (4, 55)]
复制代码


em = enumerate(l1, start=100)
l2 = [i for i in em]print(l2)
复制代码


[(100, 11), (101, 22), (102, 33), (103, 44), (104, 55)]
复制代码

collections 模块

  • namedtuple

  • deque

namedtuple

  • tuple 类型

  • 是一个可命名的 tuple


import collectionsPoint = collections.namedtuple("Point", ['x', 'y'])p = Point(11, 22)print(p.x)print(p[0])
复制代码


1111
复制代码


Circle = collections.namedtuple("Circle", ['x', 'y', 'r'])
c = Circle(100, 120, 20)print(c)print(type(c))
# 检测一下namedtuple到底属于谁的子类isinstance(c, tuple)
复制代码


Circle(x=100, y=120, r=20)<class '__main__.Circle'>




True
复制代码


import collectionshelp(collections.namedtuple)
复制代码


Help on function namedtuple in module collections:
namedtuple(typename, field_names, *, rename=False, defaults=None, module=None) Returns a new subclass of tuple with named fields. >>> Point = namedtuple('Point', ['x', 'y']) >>> Point.__doc__ # docstring for the new class 'Point(x, y)' >>> p = Point(11, y=22) # instantiate with positional args or keywords >>> p[0] + p[1] # indexable like a plain tuple 33 >>> x, y = p # unpack like a regular tuple >>> x, y (11, 22) >>> p.x + p.y # fields also accessible by name 33 >>> d = p._asdict() # convert to a dictionary >>> d['x'] 11 >>> Point(**d) # convert from a dictionary Point(x=11, y=22) >>> p._replace(x=100) # _replace() is like str.replace() but targets named fields Point(x=100, y=22)
复制代码

deque

  • 比较方便的解决了频繁删除插入带来的效率问题


from collections import deque
q = deque(['a', 'b', 'c'])print(q)
q.append('d')print(q)
q.appendleft('x')print(q)
复制代码


deque(['a', 'b', 'c'])deque(['a', 'b', 'c', 'd'])deque(['x', 'a', 'b', 'c', 'd'])
复制代码

defaultdict

  • 当直接读取 dict 不存在的属性时,直接返回默认值


d1 = {"one":1, "two":2, "three":3}print(d1['one'])print(d1['four'])
复制代码


1


---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-34-83fcfcbfcf65> in <module> 1 d1 = {"one":1, "two":2, "three":3} 2 print(d1['one'])----> 3 print(d1['four'])

KeyError: 'four'
复制代码


from collections import defaultdict# lambda表达式,直接返回字符串func = lambda: "ruochen"d2 = defaultdict(func)
d2["one"] = 1d2["two"] = 2
print(d2['one'])print(d2['four'])
复制代码


1ruochen
复制代码

Counter

  • 统计字符串个数


from collections import Counter
# 为什么下面结果不把abcd...作为键值,而是以其中每一个字母作为键值# 需要括号里内容为可迭代c = Counter("abcdeabcabc")print(c)
复制代码


Counter({'a': 3, 'b': 3, 'c': 3, 'd': 1, 'e': 1})
复制代码


# help(Counter)
复制代码


s = {"I", "love", "you"}c = Counter(s)
print(c)
复制代码


Counter({'love': 1, 'you': 1, 'I': 1})
复制代码


发布于: 2021 年 05 月 24 日阅读数: 25
用户头像

若尘

关注

还未添加个人签名 2021.01.11 加入

还未添加个人简介

评论

发布
暂无评论
python 高级函数补充