高级函数补充 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 )
高级函数补充
zip
- 把两个可迭代内容生成一个可迭代的tuple元素类型组成的内容
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类型
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
Point = collections.namedtuple("Point", ['x', 'y'])
p = Point(11, 22)
print(p.x)
print(p[0])11
11Circle = 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'>
Trueimport collections
help(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
- 比较方便的解决了频繁删除插入带来的效率问题
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不存在的属性时,直接返回默认值
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"] = 1
d2["two"] = 2
print(d2['one'])
print(d2['four'])1
ruochen
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})