Python奇遇记:数据结构窥探2

上次咱们讲了几个不常见的数据类型,每一个都有本身特殊的用途,虽然不常常用到,了解一下也好。好比咱们提到的数组类型,若是在数据量很大的时候同时要效率,就可使用它。此次来讲说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,带你走进机器学习的世界。
图片描述

相关文章
相关标签/搜索