前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 高级函数补充

python 高级函数补充

原创
作者头像
ruochen
修改2021-05-12 09:59:06
5070
修改2021-05-12 09:59:06
举报

高级函数补充

zip

  • 把两个可迭代内容生成一个可迭代的tuple元素类型组成的内容
代码语言:txt
复制
# 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)
代码语言:txt
复制
<class 'zip'>
代码语言:txt
复制
(1, 11)
代码语言:txt
复制
(2, 22)
代码语言:txt
复制
(3, 33)
代码语言:txt
复制
(4, 44)
代码语言:txt
复制
(5, 55)
代码语言:txt
复制
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)
代码语言:txt
复制
('wangwang', 89)
代码语言:txt
复制
('mingyue', 23)
代码语言:txt
复制
('yyt', 78)
代码语言:txt
复制
<generator object <genexpr> at 0x000001ED9F1F3ED0>

enumerate

  • 跟zip功能比较像
  • 对可迭代对象里的每一元素,配上一个索引,然后索引和内容构成tuple类型
代码语言:txt
复制
l1 = [11,22,33,44,55]

em = enumerate(l1)

l2 = [i for i in em]
print(l2)
代码语言:txt
复制
[(0, 11), (1, 22), (2, 33), (3, 44), (4, 55)]
代码语言:txt
复制
em = enumerate(l1, start=100)

l2 = [i for i in em]
print(l2)
代码语言:txt
复制
[(100, 11), (101, 22), (102, 33), (103, 44), (104, 55)]

collections模块

  • namedtuple
  • deque

namedtuple

  • tuple类型
  • 是一个可命名的tuple
代码语言:txt
复制
import collections
Point = collections.namedtuple("Point", ['x', 'y'])
p = Point(11, 22)
print(p.x)
print(p[0])
代码语言:txt
复制
11
代码语言:txt
复制
11
代码语言:txt
复制
Circle = collections.namedtuple("Circle", ['x', 'y', 'r'])

c = Circle(100, 120, 20)
print(c)
print(type(c))

# 检测一下namedtuple到底属于谁的子类
isinstance(c, tuple)
代码语言:txt
复制
Circle(x=100, y=120, r=20)
代码语言:txt
复制
<class '__main__.Circle'>
代码语言:txt
复制
True
代码语言:txt
复制
import collections
help(collections.namedtuple)
代码语言:txt
复制
Help on function namedtuple in module collections:
代码语言:txt
复制
namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
代码语言:txt
复制
    Returns a new subclass of tuple with named fields.
代码语言:txt
复制
    >>> Point = namedtuple('Point', ['x', 'y'])
代码语言:txt
复制
    >>> Point.__doc__                   # docstring for the new class
代码语言:txt
复制
    'Point(x, y)'
代码语言:txt
复制
    >>> p = Point(11, y=22)             # instantiate with positional args or keywords
代码语言:txt
复制
    >>> p[0] + p[1]                     # indexable like a plain tuple
代码语言:txt
复制
    33
代码语言:txt
复制
    >>> x, y = p                        # unpack like a regular tuple
代码语言:txt
复制
    >>> x, y
代码语言:txt
复制
    (11, 22)
代码语言:txt
复制
    >>> p.x + p.y                       # fields also accessible by name
代码语言:txt
复制
    33
代码语言:txt
复制
    >>> d = p._asdict()                 # convert to a dictionary
代码语言:txt
复制
    >>> d['x']
代码语言:txt
复制
    11
代码语言:txt
复制
    >>> Point(**d)                      # convert from a dictionary
代码语言:txt
复制
    Point(x=11, y=22)
代码语言:txt
复制
    >>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields
代码语言:txt
复制
    Point(x=100, y=22)

deque

  • 比较方便的解决了频繁删除插入带来的效率问题
代码语言:txt
复制
from collections import deque

q = deque(['a', 'b', 'c'])
print(q)

q.append('d')
print(q)

q.appendleft('x')
print(q)
代码语言:txt
复制
deque(['a', 'b', 'c'])
代码语言:txt
复制
deque(['a', 'b', 'c', 'd'])
代码语言:txt
复制
deque(['x', 'a', 'b', 'c', 'd'])

defaultdict

  • 当直接读取dict不存在的属性时,直接返回默认值
代码语言:txt
复制
d1 = {"one":1, "two":2, "three":3}
print(d1['one'])
print(d1['four'])
代码语言:txt
复制
1
代码语言:txt
复制
---------------------------------------------------------------------------
代码语言:txt
复制
KeyError                                  Traceback (most recent call last)
代码语言:txt
复制
<ipython-input-34-83fcfcbfcf65> in <module>
代码语言:txt
复制
      1 d1 = {"one":1, "two":2, "three":3}
代码语言:txt
复制
      2 print(d1['one'])
代码语言:txt
复制
----> 3 print(d1['four'])
代码语言:txt
复制
KeyError: 'four'
代码语言:txt
复制
from collections import defaultdict
# lambda表达式,直接返回字符串
func = lambda: "ruochen"
d2 = defaultdict(func)

d2["one"] = 1
d2["two"] = 2

print(d2['one'])
print(d2['four'])
代码语言:txt
复制
1
代码语言:txt
复制
ruochen

Counter

  • 统计字符串个数
代码语言:txt
复制
from collections import Counter

# 为什么下面结果不把abcd...作为键值,而是以其中每一个字母作为键值
# 需要括号里内容为可迭代
c = Counter("abcdeabcabc")
print(c)
代码语言:txt
复制
Counter({'a': 3, 'b': 3, 'c': 3, 'd': 1, 'e': 1})
代码语言:txt
复制
# help(Counter)
代码语言:txt
复制
s = {"I", "love", "you"}
c = Counter(s)

print(c)
代码语言:txt
复制
Counter({'love': 1, 'you': 1, 'I': 1})

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 高级函数补充
  • zip
  • enumerate
  • collections模块
    • namedtuple
    • deque
    • defaultdict
    • Counter
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com