摘要:找出列表中小于的数据除了列表推导式,还有字典推导式,集合推导式,用法都一样。如果你的数据量很大的话,考虑使用生成器表达式。切片不仅对列表有用,同样适用于元组和字符串。切片命名使用方法,内部参数与切片一样。对剩余的的数据,使用星号代替即可。
上次我们讲了几个不常见的数据类型,每个都有自己特殊的用途,虽然不经常用到,了解一下也好。比如我们提到的数组类型,如果在数据量很大的时候同时要效率,就可以使用它。这次来说说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)
at 0x7f7c93644db0> 0 3 1 4 2 2 3 8 4 5 5 7
需要注意的事,生成器表达式一次只能用一次迭达,上面我们对r进行了一次迭代,如果再次输出就是空的。
关于什么是生成器我们下次再讲。
如果我们需要找出列表中的某个数据?或者是某一部分的数据?
使用切片。切片不仅对列表有用,同样适用于元组和字符串。切片中以冒号间隔,前两个参数为起始点,第三个为步长,也就是每隔几个找一个出来。
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方法,内部参数与切片一样。
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,带你走进机器学习的世界。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44537.html
摘要:字典和集合都是基于散列表实现的,散列表也就是表,了解过数据结构的应该知道。而使用另一种办法,任何键在找不到的情况下都会用中的值数据类型比如替换。在设计时就可以使用创建你的数据接口。 这次主要说说字典和集合这两种数据类型。 字典和集合都是基于散列表实现的,散列表也就是hash表,了解过数据结构的应该知道。与散列表相关的一个概念叫做可散列,什么是可散列?在python官方定义中是这样说的:...
摘要:挤掉了堆中实现了堆排序。你可以用堆排序来查找一个序列中最大的或者最小的几个元素。除了使用堆排序,中还有排序和,这两个排序最终生成以列表表示的排序结果,堆排序也是。 这次我们来说说python中的数据结构。当然了,不会讲很基础的内容。 用过python的都知道,python有着与其他语言很不一样的数据类型,像什么列表、元组、集合、字典之类。这些数据类型造就了python简单易用同时又很强...
摘要:在中,特殊方法以双下划线开始,以双下划线结束。真假值,如果向量模为,返回实现向量加法实现向量乘法,例如返回向量的模返回欧几里德范数找个例子运行下。怎么办中有个特殊方法,可以修改控制台输出的样式。 什么是特殊方法?当我们在设计一个类的时候,python中有一个用于初始化的方法$__init__$,类似于java中的构造器,这个就是特殊方法,也叫作魔术方法。简单来说,特殊方法可以给你设计的...
摘要:来说说迭代器和生成器,还有可迭代对象和生成器表达式。有点绕是不是,其实,一般只要知道可迭代对象以及它是如何实现的就行了,中常常用生成器来代替迭代器,可以说,生成器就是迭代器。 来说说迭代器和生成器,还有可迭代对象和生成器表达式。 之前简单的提到过,一个对象是可迭代的可以理解为能够使用for循环。这样说其实不太准确,某个对象可迭代是因为它内部实现了$__iter__$这个特殊方法。比如在...
摘要:先不讲数据结构了,这次来说说中一些不被注意的功能。直接交换第二个功能。对的长度使用生成一个序列,然后遍历或者这样第三个功能。其实还接受第二个参数,它的作用是在迭代的过程中如果碰到第二个参数则停止。 先不讲数据结构了,这次来说说python中一些不被注意的功能。 在python的设计哲学中,有这么一条内容:Simple is better than complex,简单的代码比复杂的要好...
阅读 2338·2021-10-14 09:42
阅读 1110·2021-09-22 15:09
阅读 3499·2021-09-09 09:33
阅读 2968·2021-09-07 09:59
阅读 3608·2021-09-03 10:34
阅读 3502·2021-07-26 22:01
阅读 2797·2019-08-30 13:06
阅读 1145·2019-08-30 10:48