上次咱们讲了几个不常见的数据类型,每一个都有本身特殊的用途,虽然不常常用到,了解一下也好。好比咱们提到的数组类型,若是在数据量很大的时候同时要效率,就可使用它。此次来讲说python中常见的数据类型像列表、元组、字典、集合中的一些颇有用的技巧,帮助你提升开发效率。python
来看看。数组
列表有一个颇有用的技巧是使用列表推导式,这个你们可能都知道,若是你须要迭代列表中的数据,使用循环是个很麻烦的事,使用列表推导式一行就搞定。机器学习
datas = [3, 4, 2, 8, 12, 5, 7] # 找出列表中小于10的数据 print([data for data in datas if data<10])
[3, 4, 2, 8, 5, 7]
除了列表推导式,还有字典推导式,集合推导式,用法都同样。还有一个特殊的生成器表达式,生成器表达式并不会在刚开始就生成一个数据类型,而是在迭代时才生成,这样能够节省内存。若是你的数据量很大的话,考虑使用生成器表达式。生成器表达式使用小括号。函数
# 使用上面的数据 # 生成器表达式使用小括号 r = (data for data in datas if data<10) # 你看,打印r时并不会输出结果 print(r) # 如今就能够了 # enumerate同时返回下标和元素 for i, j in enumerate(r): print(i, j)
<generator object <genexpr> at 0x7f7c93644db0> 0 3 1 4 2 2 3 8 4 5 5 7
须要注意的事,生成器表达式一次只能用一次迭达,上面咱们对r进行了一次迭代,若是再次输出就是空的。学习
关于什么是生成器咱们下次再讲。spa
若是咱们须要找出列表中的某个数据?或者是某一部分的数据?code
使用切片。切片不只对列表有用,一样适用于元组和字符串。切片中以冒号间隔,前两个参数为起始点,第三个为步长,也就是每隔几个找一个出来。对象
a = [2, 3, 'a', 6, 4] print(a[3:4]) b = 'hahahah' # 步长为2 print(b[::2]) # 若是步长设为1,就是从后往前取值 # 对b取反 print(b[::-1]) c = (2, 2, 3, 4, 5) print(c[:3])
[6] hhhh hahahah (2, 2, 3)
每次都用数字表示切片的起始点看起来很麻烦对不对,还要记住从哪开始从哪结束。若是你须要对不少不一样的数据都执行一样的切片操做,最好是为切片命名,这样只需定义一次就好了。切片命名使用slice方法,内部参数与切片同样。three
items = [1, 2, 3, 4, 5, 6, 7] # slice用来对切片命名,好比规定这个切片是从2到4,2个步长,而后就可使用了 a = slice(2, 4) print(a) print(items[a]) # 其它的数据也能用 itemss = [1, 2, 4, 6, 5, 6, 7] print(itemss[a])
slice(2, 4, None) [3, 4] [4, 6]
还有一个技巧叫作拆包,就是把一个列表或者字符同时赋值给多个变量,任何可迭代对象(也就是可以用for循环)均可以使用拆包。好比有一个函数返回了多个数据,咱们在调用时就能够直接赋值给多个变量,而不用再定义一个数据类型,而后再赋值。多麻烦啊。图片
a, b, c = [1, 2, 4] print(a) a, b = 'it' print(a)
1 i
有一个问题,若是个人数据不少,难道要一个一个赋值给变量。多麻烦啊。对剩余的的数据,使用星号代替便可。若是数据不是你须要的,使用_代替,使用其它的字符也是能够的,这只是一个约定而已。
# 能够这样 data = [1, 2, 3, 4, 5, 6] a, b, *r = data print(r) # 也能够这样 *a, b, c, d = data print(a)
[3, 4, 5, 6] [1, 2, 3]
最后一个技巧。
若是咱们须要统计一个序列(字符串、列表、元组)中某个元素出现的次数,怎么实现?循环这个序列,利用元素的下标,若是某个元素出现则加1,想一想都麻烦。使用collections.Counter。counter中有个most_common方法,接受须要统计的元素个数做为参数。例子以下:
words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the', 'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into', 'my', 'eyes', "you're", 'under' ] from collections import Counter word_counts = Counter(words) # 出现频率最高的3个单词 top_three = word_counts.most_common(3) print(top_three)
[('eyes', 8), ('the', 5), ('look', 4)]
限于篇幅,还有许多awesome的技巧没有涉及,下篇文章咱们再讲。但愿上面说的一些东西对你有帮助。
本人才疏学浅,上文中不免有些错误,还请各位品评指正。若是以为写的还行,欢迎关注个人公众号MLGroup,带你走进机器学习的世界。