加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

小姐姐的Python潜匿能力合集,推特2400赞,代码可以直接跑

发布时间:2019-10-24 13:31:55 所属栏目:建站 来源:栗子
导读:本文经AI新媒体量子位(公家号ID:QbitAI)授权转载,转载请接洽出处。 经常发资源的英伟达工程师小姐姐Chip Huyen,又发了一套Python潜匿成果合集。 内里都是她以前没发明,可能以前不太敢用的呆板进修能力,有notebook可以直接跑。 合集名叫python-is-coo

只要让 ngrams 函数,用 yield 要害字返回一个天生器,然后内存需求就酿成 O(n) 了。

  1.  1def ngrams(tokens, n): 
  2.  2 length = len(tokens) 
  3.  3 for i in range(length - n + 1): 
  4.  4 yield tokens[i:i+n] 
  5.  5 
  6.  6ngrams_generator = ngrams(tokens, 3) 
  7.  7print(ngrams_generator) 
  8.  8 
  9.  9==> <generator object ngrams at 0x1069b26d0> 
  10. 10 
  11. 11for ngram in ngrams_generator: 
  12. 12 print(ngram) 
  13. 13 
  14. 14==> ['i', 'want', 'to'] 
  15. 15 ['want', 'to', 'go'] 
  16. 16 ['to', 'go', 'to'] 
  17. 17 ['go', 'to', 'school'] 

尚有一种天生n-grams的要领,是用切片来建设列表:[0, 1, …, -n], [1, 2, …, -n+1], …, [n-1, n, …, -1],然后把它们zip到一路。

  1. 1def ngrams(tokens, n): 
  2.  2 length = len(tokens) 
  3.  3 slices = (tokens[i:length-n+i+1] for i in range(n)) 
  4.  4 return zip(*slices) 
  5.  5 
  6.  6ngrams_generator = ngrams(tokens, 3) 
  7.  7print(ngrams_generator) 
  8.  8 
  9.  9==> <zip object at 0x1069a7dc8> # zip objects are generators 
  10. 10 
  11. 11for ngram in ngrams_generator: 
  12. 12 print(ngram) 
  13. 13 
  14. 14==> ('i', 'want', 'to') 
  15. 15 ('want', 'to', 'go') 
  16. 16 ('to', 'go', 'to') 
  17. 17 ('go', 'to', 'school') 

留意,建设切片用的是 (tokens[…] for i in range(n)) ,不是 [tokens[…] for i in range(n)] 。

[] 返回的是列表,() 返回的是天生器。

3、类,以及把戏要领

在Python内里,把戏要领 (Magic Methods) 是用双下划线,作为前缀后缀的。

个中,最知名的也许就是 _init_ 了。

  1. 1class Node: 
  2. 2 """ A struct to denote the node of a binary tree. 
  3. 3 It contains a value and pointers to left and right children. 
  4. 4 """ 
  5. 5 def __init__(self, value, left=None, right=None): 
  6. 6 self.value = value 
  7. 7 self.left = left 
  8. 8 self.right = right 

不外,假如想输出 (Print) 一个节点 (Node) ,就不是很轻易了。

  1. 1root = Node(5) 
  2. 2print(root) # <__main__.Node object at 0x1069c4518> 

抱负环境,应该是输出它的值,假如它有子节点的话,也输出子节点的值。

以是,要用把戏要领 _repr_ ,它必需返回一个可输出的object,如字符串。

  1. 1class Node: 
  2.  2 """ A struct to denote the node of a binary tree. 
  3.  3 It contains a value and pointers to left and right children. 
  4.  4 """ 
  5.  5 def __init__(self, value, left=None, right=None): 
  6.  6 self.value = value 
  7.  7 self.left = left 
  8.  8 self.right = right 
  9.  9 
  10. 10 def __repr__(self):  
  11. 11 strings = [f'value: {self.value}'] 
  12. 12 strings.append(f'left: {self.left.value}' if self.left else 'left: None') 
  13. 13 strings.append(f'right: {self.right.value}' if self.right else 'right: None') 
  14. 14 return ', '.join(strings) 
  15. 15 
  16. 16left = Node(4) 
  17. 17root = Node(5, left) 
  18. 18print(root) # value: 5, left: 4, right: None 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读