1.11 列表以及迭代器的压缩和解压缩 1 2 3 4 5 6 7 | >>> a = [ 1 , 2 , 3 ]
>>> b = [ 'a' , 'b' , 'c' ]
>>> z = zip (a, b)
>>> z
[( 1 , 'a' ), ( 2 , 'b' ), ( 3 , 'c' )]
>>> zip ( * z)
[( 1 , 2 , 3 ), ( 'a' , 'b' , 'c' )]
|
1.12 列表相邻元素压缩器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | >>> a = [ 1 , 2 , 3 , 4 , 5 , 6 ]
>>> zip ( * ([ iter (a)] * 2 ))
[( 1 , 2 ), ( 3 , 4 ), ( 5 , 6 )]
>>> group_adjacent = lambda a, k: zip ( * ([ iter (a)] * k))
>>> group_adjacent(a, 3 )
[( 1 , 2 , 3 ), ( 4 , 5 , 6 )]
>>> group_adjacent(a, 2 )
[( 1 , 2 ), ( 3 , 4 ), ( 5 , 6 )]
>>> group_adjacent(a, 1 )
[( 1 ,), ( 2 ,), ( 3 ,), ( 4 ,), ( 5 ,), ( 6 ,)]
>>> zip (a[:: 2 ], a[ 1 :: 2 ])
[( 1 , 2 ), ( 3 , 4 ), ( 5 , 6 )]
>>> zip (a[:: 3 ], a[ 1 :: 3 ], a[ 2 :: 3 ])
[( 1 , 2 , 3 ), ( 4 , 5 , 6 )]
>>> group_adjacent = lambda a, k: zip ( * (a[i::k] for i in range (k)))
>>> group_adjacent(a, 3 )
[( 1 , 2 , 3 ), ( 4 , 5 , 6 )]
>>> group_adjacent(a, 2 )
[( 1 , 2 ), ( 3 , 4 ), ( 5 , 6 )]
>>> group_adjacent(a, 1 )
[( 1 ,), ( 2 ,), ( 3 ,), ( 4 ,), ( 5 ,), ( 6 ,)]
|
1.13 在列表中用压缩器和迭代器滑动取值窗口 1 2 3 4 5 6 7 8 9 10 11 | >>> def n_grams(a, n):
... z = [ iter (a[i:]) for i in range (n)]
... return zip ( * z)
...
>>> a = [ 1 , 2 , 3 , 4 , 5 , 6 ]
>>> n_grams(a, 3 )
[( 1 , 2 , 3 ), ( 2 , 3 , 4 ), ( 3 , 4 , 5 ), ( 4 , 5 , 6 )]
>>> n_grams(a, 2 )
[( 1 , 2 ), ( 2 , 3 ), ( 3 , 4 ), ( 4 , 5 ), ( 5 , 6 )]
>>> n_grams(a, 4 )
[( 1 , 2 , 3 , 4 ), ( 2 , 3 , 4 , 5 ), ( 3 , 4 , 5 , 6 )]
|
1.14 用压缩器反转字典 1 2 3 4 5 6 7 8 | >>> m = { 'a' : 1 , 'b' : 2 , 'c' : 3 , 'd' : 4 }
>>> m.items()
[( 'a' , 1 ), ( 'c' , 3 ), ( 'b' , 2 ), ( 'd' , 4 )]
>>> zip (m.values(), m.keys())
[( 1 , 'a' ), ( 3 , 'c' ), ( 2 , 'b' ), ( 4 , 'd' )]
>>> mi = dict ( zip (m.values(), m.keys()))
>>> mi
{ 1 : 'a' , 2 : 'b' , 3 : 'c' , 4 : 'd' }
|
1.15 列表展开 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | >>> a = [[ 1 , 2 ], [ 3 , 4 ], [ 5 , 6 ]]
>>> list (itertools.chain.from_iterable(a))
[ 1 , 2 , 3 , 4 , 5 , 6 ]
>>> sum (a, [])
[ 1 , 2 , 3 , 4 , 5 , 6 ]
>>> [x for l in a for x in l]
[ 1 , 2 , 3 , 4 , 5 , 6 ]
>>> a = [[[ 1 , 2 ], [ 3 , 4 ]], [[ 5 , 6 ], [ 7 , 8 ]]]
>>> [x for l1 in a for l2 in l1 for x in l2]
[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]
>>> 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 ]
|
1.16 生成器表达式 1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> g = (x * * 2 for x in xrange ( 10 ))
>>> next (g)
0
>>> next (g)
1
>>> next (g)
4
>>> next (g)
9
>>> sum (x * * 3 for x in xrange ( 10 ))
2025
>>> sum (x * * 3 for x in xrange ( 10 ) if x % 3 = = 1 )
408
|
1.17 字典推导 1 2 3 4 5 6 7 | >>> m = {x: x * * 2 for x in range ( 5 )}
>>> m
{ 0 : 0 , 1 : 1 , 2 : 4 , 3 : 9 , 4 : 16 }
>>> m = {x: 'A' + str (x) for x in range ( 10 )}
>>> m
{ 0 : 'A0' , 1 : 'A1' , 2 : 'A2' , 3 : 'A3' , 4 : 'A4' , 5 : 'A5' , 6 : 'A6' , 7 : 'A7' , 8 : 'A8' , 9 : 'A9' }
|
1.18 用字典推导反转字典 1 2 3 4 5 | >>> m = { 'a' : 1 , 'b' : 2 , 'c' : 3 , 'd' : 4 }
>>> m
{ 'd' : 4 , 'a' : 1 , 'b' : 2 , 'c' : 3 }
>>> {v: k for k, v in m.items()}
{ 1 : 'a' , 2 : 'b' , 3 : 'c' , 4 : 'd' }
|
1.19 命名元组 1 2 3 4 5 6 7 8 | >>> Point = collections.namedtuple( 'Point' , [ 'x' , 'y' ])
>>> p = Point(x = 1.0 , y = 2.0 )
>>> p
Point(x = 1.0 , y = 2.0 )
>>> p.x
1.0
>>> p.y
2.0
|
1.20 继承命名元组 1 2 3 4 5 6 7 8 9 | >>> class Point(collections.namedtuple( 'PointBase' , [ 'x' , 'y' ])):
... __slots__ = ()
... def __add__( self , other):
... return Point(x = self .x + other.x, y = self .y + other.y)
...
>>> p = Point(x = 1.0 , y = 2.0 )
>>> q = Point(x = 2.0 , y = 3.0 )
>>> p + q
Point(x = 3.0 , y = 5.0 )
|
-
快毕业了,没工作经验,
找份工作好难啊?
赶紧去人才芯片公司磨练吧!!
|