鱼C论坛

 找回密码
 立即注册
查看: 3675|回复: 22

[技术交流] <编程技巧> 18个常用技巧

[复制链接]
发表于 2015-3-19 17:12:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 戴宇轩 于 2015-3-21 11:32 编辑

1. 拆箱
  1. >>> a, b, c = 1, 2, 3
  2. >>> a, b, c
  3. (1, 2, 3)
  4. >>> a, b, c = [1, 2, 3]
  5. >>> a, b, c
  6. (1, 2, 3)
  7. >>> a, b, c = (2 * i + 1 for i in range(3))
  8. >>> a, b, c
  9. (1, 3, 5)
  10. >>> a, (b, c), d = [1, (2, 3), 4]
  11. >>> a
  12. 1
  13. >>> b
  14. 2
  15. >>> c
  16. 3
  17. >>> d
  18. 4
复制代码


2. 变量交换
  1. >>> a, b = 1, 2
  2. >>> a, b = b, a
  3. >>> a, b
  4. (2, 1)
复制代码


3. 扩展拆箱(只兼容python3)
  1. >>> a, *b, c = [1, 2, 3, 4, 5]
  2. >>> a
  3. 1
  4. >>> b
  5. [2, 3, 4]
  6. >>> c
  7. 5
复制代码


4. 负数索引
  1. >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  2. >>> a[-1]
  3. 10
  4. >>> a[-3]
  5. 8
复制代码


5. 切割列表
  1. >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  2. >>> a[2:8]
  3. [2, 3, 4, 5, 6, 7]
复制代码


6. 负数索引切割列表
  1. >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  2. >>> a[-4:-2]
  3. [7, 8]
复制代码


7. 指定步长切割列表
  1. >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  2. >>> a[::2]
  3. [0, 2, 4, 6, 8, 10]
  4. >>> a[::3]
  5. [0, 3, 6, 9]
  6. >>> a[2:8:2]
  7. [2, 4, 6]
复制代码


8. 负数步长切割列表
  1. >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  2. >>> a[::-1]
  3. [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
  4. >>> a[::-2]
  5. [10, 8, 6, 4, 2, 0]
复制代码


9. 列表切割赋值
  1. >>> a = [1, 2, 3, 4, 5]
  2. >>> a[2:3] = [0, 0]
  3. >>> a
  4. [1, 2, 0, 0, 4, 5]
  5. >>> a[1:1] = [8, 9]
  6. >>> a
  7. [1, 8, 9, 2, 0, 0, 4, 5]
  8. >>> a[1:-1] = []
  9. >>> a
  10. [1, 5]
复制代码


10. 命名列表切割方式
  1. >>> a = [0, 1, 2, 3, 4, 5]
  2. >>> cut = slice(-3, None)
  3. >>> cut
  4. slice(-3, None, None)
  5. >>> a[cut]
  6. [3, 4, 5]
复制代码


11. 列表以及迭代器的压缩和解压缩
  1. >>> a = [1, 2, 3]
  2. >>> b = ['a', 'b', 'c']
  3. >>> z = zip(a, b)
  4. >>> z
  5. [(1, 'a'), (2, 'b'), (3, 'c')]
  6. >>> zip(*z)
  7. [(1, 2, 3), ('a', 'b', 'c')]
复制代码


12. 列表相邻元素压缩器
  1. >>> a = [1, 2, 3, 4, 5, 6]
  2. >>> zip(*([iter(a)] * 2))
  3. [(1, 2), (3, 4), (5, 6)]

  4. >>> group_adjacent = lambda a, k: zip(*([iter(a)] * k))
  5. >>> group_adjacent(a, 3)
  6. [(1, 2, 3), (4, 5, 6)]
  7. >>> group_adjacent(a, 2)
  8. [(1, 2), (3, 4), (5, 6)]
  9. >>> group_adjacent(a, 1)
  10. [(1,), (2,), (3,), (4,), (5,), (6,)]

  11. >>> zip(a[::2], a[1::2])
  12. [(1, 2), (3, 4), (5, 6)]

  13. >>> zip(a[::3], a[1::3], a[2::3])
  14. [(1, 2, 3), (4, 5, 6)]

  15. >>> group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k)))
  16. >>> group_adjacent(a, 3)
  17. [(1, 2, 3), (4, 5, 6)]
  18. >>> group_adjacent(a, 2)
  19. [(1, 2), (3, 4), (5, 6)]
  20. >>> group_adjacent(a, 1)
  21. [(1,), (2,), (3,), (4,), (5,), (6,)]
复制代码


13. 在列表中用压缩器和迭代器滑动取值窗口
  1. >>> def n_grams(a, n):
  2. ...     z = [iter(a[i:]) for i in range(n)]
  3. ...     return zip(*z)
  4. ...
  5. >>> a = [1, 2, 3, 4, 5, 6]
  6. >>> n_grams(a, 3)
  7. [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]
  8. >>> n_grams(a, 2)
  9. [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
  10. >>> n_grams(a, 4)
  11. [(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]
复制代码


14. 用压缩器反转字典
  1. >>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
  2. >>> m.items()
  3. [('a', 1), ('c', 3), ('b', 2), ('d', 4)]
  4. >>> zip(m.values(), m.keys())
  5. [(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]
  6. >>> mi = dict(zip(m.values(), m.keys()))
  7. >>> mi
  8. {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
复制代码


15. 列表展开
  1. >>> a = [[1, 2], [3, 4], [5, 6]]
  2. >>> list(itertools.chain.from_iterable(a))
  3. [1, 2, 3, 4, 5, 6]

  4. >>> sum(a, [])
  5. [1, 2, 3, 4, 5, 6]

  6. >>> [x for l in a for x in l]
  7. [1, 2, 3, 4, 5, 6]

  8. >>> a = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
  9. >>> [x for l1 in a for l2 in l1 for x in l2]
  10. [1, 2, 3, 4, 5, 6, 7, 8]

  11. >>> a = [1, 2, [3, 4], [[5, 6], [7, 8]]]
  12. >>> flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]
  13. >>> flatten(a)
  14. [1, 2, 3, 4, 5, 6, 7, 8]
复制代码


16. 生成器表达式
  1. >>> g = (x ** 2 for x in xrange(10))
  2. >>> next(g)
  3. 0
  4. >>> next(g)
  5. 1
  6. >>> next(g)
  7. 4
  8. >>> next(g)
  9. 9
  10. >>> sum(x ** 3 for x in xrange(10))
  11. 2025
  12. >>> sum(x ** 3 for x in xrange(10) if x % 3 == 1)
  13. 408
复制代码


17. 字典推导
  1. >>> m = {x: x ** 2 for x in range(5)}
  2. >>> m
  3. {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

  4. >>> m = {x: 'A' + str(x) for x in range(10)}
  5. >>> m
  6. {0: 'A0', 1: 'A1', 2: 'A2', 3: 'A3', 4: 'A4', 5: 'A5', 6: 'A6', 7: 'A7', 8: 'A8', 9: 'A9'}
复制代码


18. 用字典推导反转字典
  1. >>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
  2. >>> m
  3. {'d': 4, 'a': 1, 'b': 2, 'c': 3}
  4. >>> {v: k for k, v in m.items()}
  5. {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-19 17:23:18 | 显示全部楼层
更这么快!听说用xx系列会吸引很多人。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 17:26:43 | 显示全部楼层
wei_Y 发表于 2015-3-19 17:23
更这么快!听说用xx系列会吸引很多人。

什么意思???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-19 17:42:04 | 显示全部楼层

Python编程技巧系列之2---18个常用技巧。类似的。我没试过,从网上看到的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-19 18:56:17 | 显示全部楼层
收藏了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-12 19:35:54 | 显示全部楼层
好吧,初学者表示完全看不懂……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-19 20:38:29 | 显示全部楼层
以后应该能用到,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-20 09:04:27 | 显示全部楼层
GOOD
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2015-5-22 21:21:20 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-25 15:10:08 | 显示全部楼层
好东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-25 15:32:30 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-15 16:21:19 | 显示全部楼层
以后应该用的到,先mark啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-18 14:35:25 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-18 17:39:51 | 显示全部楼层
学习学习~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-3 13:04:38 | 显示全部楼层
谢谢,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-11 14:48:47 | 显示全部楼层
这么好的东西为毛不置顶?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-19 09:57:20 | 显示全部楼层
收藏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-24 15:55:16 | 显示全部楼层
占个地,学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-2 15:18:39 | 显示全部楼层
收获不小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-21 13:32:51 | 显示全部楼层
虽然新人表示看不太懂。
不过感觉很有用的样子~~~

先留好标记,免得后面找不到~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 07:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表