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

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

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

想把一个列表解包成一个一个元素,就这样:

  1. 1elems = [1, 2, 3, 4] 
  2. 2a, b, c, d = elems 
  3. 3print(a, b, c, d) 
  4. 5==> 1 2 3 4 

也可以这样:

  1. 1elems = [1, 2, 3, 4] 
  2. 2a, b, c, d = elems 
  3. 3print(a, b, c, d) 
  4. 5==> 1 2 3 4 

2.2、切片 (Slicing)

各人也许知道,假如想把一个列表反过来排,就用 [::-1] 。

  1. 1elems = list(range(10)) 
  2. 2print(elems) 
  3. 4==> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
  4. 6print(elems[::-1]) 
  5. 8==> [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

而 [x:y:z] 这种语法的意思是,从索引x到索引y,每z个元素取一个。

假如z是负数,就是反向取了。

假如x不出格指定,就默认是在遍历列表的偏向上,碰着的第一个元素。

假如y不出格指定,就默认是列表最后一个元素。

以是,我们要从一个列表内里,每两个取一个的话,就是 [::2] 。

  1. 1evens = elems[::2] 
  2. 2print(evens) 
  3. 4reversed_evens = elems[-2::-2] 
  4. 5print(reversed_evens) 
  5. 7==> [0, 2, 4, 6, 8] 
  6. 8 [8, 6, 4, 2, 0] 

也可以用这种要领,把一个列内外的偶数都删掉,只留奇数:

  1. 1del elems[::2] 
  2. 2print(elems) 
  3. 4==> [1, 3, 5, 7, 9] 

2.3、插入 (Insertion)

把列内外的个中一个元素的值,换成另一个值。

  1. 1elems = list(range(10)) 
  2. 2elems[1] = 10 
  3. 3print(elems) 
  4. 5==> [0, 10, 2, 3, 4, 5, 6, 7, 8, 9] 

假如想把某个索引处的一个元素,替代成多个元素,好比把 1 换成 20, 30, 40 :

  1. 1elems = list(range(10)) 
  2. 2elems[1:2] = [20, 30, 40] 
  3. 3print(elems) 
  4. 5==> [0, 20, 30, 40, 2, 3, 4, 5, 6, 7, 8, 9] 

假如想把3个值 0.2, 0.3, 0.5 插在索引0和索引1之间:

  1. 1elems = list(range(10)) 
  2. 2elems[1:1] = [0.2, 0.3, 0.5] 
  3. 3print(elems) 
  4. 5==> [0, 0.2, 0.3, 0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

2.4、拉平 (Flattening)

假如,一个列内外的每个元素都是个列表,可以用sum把它拉平:

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

假如是嵌套列表 (Nested List) 的话,就可以用递归的要领把它拉平。这也是lambda函数又一种美妙的行使要领:在建设函数的统一行,就能用上这个函数。

  1. 1nested_lists = [[1, 2], [[3, 4], [5, 6], [[7, 8], [9, 10], [[11, [12, 13]]]]]] 
  2. 2flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x] 
  3. 3flatten(nested_lists) 
  4. 5# This line of code is from 
  5. 6# https://github.com/sahands/python-by-example/blob/master/python-by-example.rst#flattening-lists 

2.5、列表vs天生器

要想知道列表和天生器的区别在哪,看个例子:从token列表内里建设n-grams。

一种要领是用滑窗来建设:

  1. 1tokens = ['i', 'want', 'to', 'go', 'to', 'school'] 
  2.  2 
  3.  3def ngrams(tokens, n): 
  4.  4 length = len(tokens) 
  5.  5 grams = [] 
  6.  6 for i in range(length - n + 1): 
  7.  7 grams.append(tokens[i:i+n]) 
  8.  8 return grams 
  9.  9 
  10. 10print(ngrams(tokens, 3)) 
  11. 11 
  12. 12==> [['i', 'want', 'to'], 
  13. 13 ['want', 'to', 'go'], 
  14. 14 ['to', 'go', 'to'], 
  15. 15 ['go', 'to', 'school']] 

上面这个例子,是必要把全部n-gram同时储存起来的。假如文本里有m个token,内存需求就是 O(nm) 。m值太大的话,存储就也许成题目。

以是,不必然要用一个列表储存全部n-gram。可以用一个天生器,在收到指令的时辰,天生下一个n-gram,这叫做惰性计较 (Lazy Evaluation) 。

(编辑:湖南网)

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

热点阅读