马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 戴宇轩 于 2015-3-21 11:32 编辑
1. 拆箱- >>> a, b, c = 1, 2, 3
- >>> a, b, c
- (1, 2, 3)
- >>> a, b, c = [1, 2, 3]
- >>> a, b, c
- (1, 2, 3)
- >>> a, b, c = (2 * i + 1 for i in range(3))
- >>> a, b, c
- (1, 3, 5)
- >>> a, (b, c), d = [1, (2, 3), 4]
- >>> a
- 1
- >>> b
- 2
- >>> c
- 3
- >>> d
- 4
复制代码
2. 变量交换- >>> a, b = 1, 2
- >>> a, b = b, a
- >>> a, b
- (2, 1)
复制代码
3. 扩展拆箱(只兼容python3)- >>> a, *b, c = [1, 2, 3, 4, 5]
- >>> a
- 1
- >>> b
- [2, 3, 4]
- >>> c
- 5
复制代码
4. 负数索引- >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- >>> a[-1]
- 10
- >>> a[-3]
- 8
复制代码
5. 切割列表- >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- >>> a[2:8]
- [2, 3, 4, 5, 6, 7]
复制代码
6. 负数索引切割列表- >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- >>> a[-4:-2]
- [7, 8]
复制代码
7. 指定步长切割列表- >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- >>> a[::2]
- [0, 2, 4, 6, 8, 10]
- >>> a[::3]
- [0, 3, 6, 9]
- >>> a[2:8:2]
- [2, 4, 6]
复制代码
8. 负数步长切割列表- >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- >>> a[::-1]
- [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
- >>> a[::-2]
- [10, 8, 6, 4, 2, 0]
复制代码
9. 列表切割赋值- >>> a = [1, 2, 3, 4, 5]
- >>> a[2:3] = [0, 0]
- >>> a
- [1, 2, 0, 0, 4, 5]
- >>> a[1:1] = [8, 9]
- >>> a
- [1, 8, 9, 2, 0, 0, 4, 5]
- >>> a[1:-1] = []
- >>> a
- [1, 5]
复制代码
10. 命名列表切割方式- >>> a = [0, 1, 2, 3, 4, 5]
- >>> cut = slice(-3, None)
- >>> cut
- slice(-3, None, None)
- >>> a[cut]
- [3, 4, 5]
复制代码
11. 列表以及迭代器的压缩和解压缩- >>> 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')]
复制代码
12. 列表相邻元素压缩器- >>> 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,)]
复制代码
13. 在列表中用压缩器和迭代器滑动取值窗口- >>> 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)]
复制代码
14. 用压缩器反转字典- >>> 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'}
复制代码
15. 列表展开- >>> 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]
复制代码
16. 生成器表达式- >>> 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
复制代码
17. 字典推导- >>> 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'}
复制代码
18. 用字典推导反转字典- >>> 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'}
复制代码 |