当下,Python 比以往的任何时候都更加流行,人们每天都在实践着 Python 是多么的强大且易用。
我从事 Python 编程已经有几年时间了,但是最近6个月才是全职的。下面列举的这些事情,是我最开始使用 Python 的时候,就希望清楚的:
- 字符串操作
- 列表推导
- Lambda 和 Map 函数
- 在一行里使用 if elif 和 else 条件判断
- zip() 函数
字符串操作
Python 非常擅长使用类似数学运算符 + 和 * 来操作字符串
>>> my_string = "Hi Medium..!"
>>> print(my_string * 2)
Hi Medium..!Hi Medium..!
>>> print(my_string + " I love Python" * 2)
Hi Medium..! I love Python I love Python
复制代码
我们也可以非常方便的对字符串做取反操作,只需要使用 [::-1] 就可以,同时该操作还不仅仅局限于字符串操作。
>>> print(my_string[::-1])
!..muideM iH
>>> my_list = [1,2,3,4,5]
>>> print(my_list[::-1])
[5, 4, 3, 2, 1]
复制代码
那么对于包含多个字符串的列表呢,我们甚至可以做一个 Yoda-translator !
>>> word_list = ["awesome", "is", "this"]
>>> print(' '.join(word_list[::-1]) + '!')
this is awesome!
复制代码
在上面的代码中,我们使用了 .join() 方法,用空格把反转列表里的元素拼接了起来,并且增加了感叹号。
列表推导
哦,天啊!一旦我知道了这些,我的整个世界都改变了(可能还没有真实发生,但是已经接近了)。这是以中国强大的、直观的且可读的方法来快速的操作列表。
假如我们有这样一个函数,取一个数的平方再增加5Python学习交流群
>>> def stupid_func(x):219539519欢迎加入
>>> return x**2 + 5
复制代码
现在如果我们要把该函数应用到一个列表的所有奇数当中,如果不了解列表推导式,你可能会这么写
>>> my_list = [1, 2, 3, 4, 5]
>>> new_list = []
>>> for x in my_list:
>>> if x % 2 != 0:
>>> new_list.append(stupid_func(x))
>>> print(new_list)
[6, 14, 30]
复制代码
但是我们还有更简单的方法!
>>> my_list = [1, 2, 3, 4, 5]
>>> print([stupid_func(x) for x in my_list if x % 2 != 0])
[6, 14, 30]
复制代码
列表推导适用于 [ expression for item in list ] 条件,同时如果那你想要应用一些布尔条件,例如上面获取奇数的条件: [ expression for item in list if conditional ],那么它和下面的写法是一致的
>>> for item in list:
>>> if conditional:
>>> expression
复制代码
很酷,不过我们还可以做的更好,因为我们根本不需要函数“stupid_func”
>>> print([x ** 2 + 5 for x in my_list if x % 2 != 0])
[6, 14, 30]
复制代码
Lambda 和 Map
Lambda
Lambda 有一点奇怪,但是就像我介绍的其他内容一样,只要你去只用它,就会发现它是多么的强大和直观。
Lambda 其实就是一个小的匿名函数。为什么要匿名呢?这是因为 Lambda 常常用来执行小型简单的操作,而这些操作往往不需要使用 def my_function() 来定义正式的函数
我们还是以上面的例子为例,对一个数进行平方并加5。在上面的代码中我们定义了一个函数 def stupid_func(x),现在让我们使用 Lambda 来重新创建它
>>> stupid_func = (lambda x : x ** 2 + 5)
>>> print([stupid_func(1), stupid_func(3), stupid_func(5)])
[6, 14, 30]
复制代码
那么,为什么要使用这种奇怪的语法呢?其实这种写法的用处就体现在,我们不要定义实际的功能,就可以实现一些简单的操作。我们继续以数字列表为例,如果我们想对下面的列表进行排序,一种方法是使用 sorted()
>>> my_list = [2, 1, 0, -1, -2]
>>> print(sorted(my_list))
[-2, -1, 0, 1, 2]
复制代码
这样确实可以了,但是,如果我们想按照元素平方数的大小来排序,使用 Lambda 就非常方便了。可以使用 Lambda 来定义 sorted() 函数用于排序的 key
>>> print(sorted(my_list, key = lambda x : x ** 2))
[0, -1, 1, -2, 2]
复制代码
Map
Map 是一个用来将函数应用到序列的每个元素上,比如列表。假设我们必须要列出两个列表对应位置元素的乘积,那么该怎么做呢,可以使用 Lambda 和 Map
>>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6])))
[4, 10, 18]
复制代码
和下面的代码相比,Lambda 与 Map 的组合实在是太优雅了
>>> x, y = [1, 2, 3], [4, 5, 6]
>>> z = []
>>> for i in range(len(x)):
>>> z.append(x[i] * y[i])
>>> print(z)
[4, 10, 18]
复制代码
在一行里使用 if elif 和 else 条件判断
有时,你可能会写出如下的代码
>>> x = int(input())
>>> if x >= 10:
>>> print("Horse")
>>> elif 1 < x < 10:
>>> print("Duck")
>>> else:
>>> print("Baguette")
复制代码
运行此命令时,系统会提示你从 input() 函数输入内容,假设我们输入5,我们将得到 Duck。 但是我们也可以像下面这样写
print("Horse" if x >= 10 else "Duck" if 1 < x < 10 else "Baguette")
复制代码
这实在是太简单了!快去阅读你的旧代码,你会发现有太多的地方可以将这种简单的 if else 判断替换成这种单行判断。
zip()
还记得在 Map 函数部分,我们并行处理两个列表的例子嘛,使用 zip() 会更加简单
假如我们有两个列表,一个包含名字,一个包含姓氏,怎样才能很好的合并它们呢,使用 zip()!
>>> first_names = ["Peter", "Christian", "Klaus"]
>>> last_names = ["Jensen", "Smith", "Nistrup"]
>>> print([' '.join(x) for x in zip(first_names, last_names)])
['Peter Jensen', 'Christian Smith', 'Klaus Nistrup']
复制代码
哇哦,有个地方错了,我的名字不叫 Peter Jensen,那么就可以调整如下
>>> print([' '.join(x) for x in zip(first_names, last_names[::-1])])
['Peter Nistrup', 'Christian Smith', 'Klaus Jensen']
复制代码
结束语
我这里只是汇总了一个简单的清单,目的就是为了让你能够了解到 Python 可以优雅的做很多事情。如果你有任何不同的想法,可以留言哦!
每个新手程序员都必须知道的Python技巧的更多相关文章
-
每一位想有所成就的程序员都必须知道的15件事(走不一样的路,要去做,实践实践再实践,推销自己,关注市场)good
从 为之漫笔作者:为之漫笔 有超过 100 人喜欢此条目 原文地址:How to advance your career? Read the Passionate Programmer! 我刚看完Ch ...
-
每个程序员都应该学习使用Python或Ruby
每个程序员都应该学习使用Python或Ruby 如果你是个学生,你应该会C,C++和Java.还会一些VB,或C#/.NET.多少你还可能开发过一些Web网页,你知道一些HTML,CSS和JavaSc ...
-
关于Unicode,字符集,字符编码,每个程序员都应该知道的事
关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
-
【vs调试】PDB 文件:每个开发人员都必须知道的
[vs调试]PDB文件:每个开发人员都必须知道的 GDB:The GNU Project Debugger, 将会包含代码中符号(自定义变量, 数据类型), 还有函数调用或类引用的关联性, 有了pdb ...
-
PDB文件:每个开发人员都必须知道的
PDB Files: What Every Developer Must Knowhttp://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05 ...
-
每个JavaScript程序员都需要知道的5个数组方法
Array.forEach() .forEach() 方法能够方便的让你 遍历数组里的每个元素,你可以在回调函数里对每个元素进行操作..forEach()方法没有返回值,你不需要在回调函数里写retu ...
-
每个php程序员都应该知道的15个最佳PHP库
PHP是一种功能强大的web站点脚本语言,通过PHP,web网站开发者可以更容易地创建动态的引人入胜的web页面.开发人员可以使用PHP代码与一些网站模板和框架来提升功能和特性.然而,编写PHP代码是 ...
-
22个必须知道的css技巧
1.改变选中文字的背景和颜色 ::selection{ /* Safari and Opera */ background:#c3effd; color:#000; } ::-moz-selectio ...
-
(转)【推荐】初级.NET程序员,你必须知道的EF知识和经验
转自:http://www.cnblogs.com/zhaopei/p/5721789.html [推荐]初级.NET程序员,你必须知道的EF知识和经验 阅读目录 [本文已下咒.先顶后看,会涨 ...
随机推荐
-
在Wcf中应用ProtoBuf替代默认的序列化器
Google的ProtoBuf序列化器性能的牛逼已经有目共睹了,可以把它应用到Socket通讯,队列,Wcf中,身为dotnet程序员一边期待着不久后Grpc对dotnet core的支持更期待着Wc ...
-
目标检测方法总结(R-CNN系列)
目标检测方法系列--R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD 目录 相关背景 从传统方法到R-CNN 从R-CNN到SPP Fast R-CNN ...
-
转:jQuery弹出二级菜单
<html> <head> <meta http-equiv="content-type" content="text/html; char ...
-
Python3基础 reverse 将列表倒序排列
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
-
HDU 1885 Key Task (BFS + 状态压缩)
题意:给定一个n*m的矩阵,里面有门,有钥匙,有出口,问你逃出去的最短路径是多少. 析:这很明显是一个BFS,但是,里面又有其他的东西,所以我们考虑状态压缩,定义三维BFS,最后一维表示拿到钥匙的状态 ...
-
第一个应用程序HelloWorld
iOS7 Beta已经发布了,迫不及待地下载了iOS 7及Xcode 5并体验了一下.先做一个简单的Hello World看看都有哪些变化吧.1. 启动Xcode5-DP:2. 从菜单选择File-N ...
-
linux dsp 播放音频文件
#include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioc ...
-
sourceforge.net 打不开怎么办?(转)
sourceforge.net 打不开怎么办?找个镜像地址下吧! 笔者试了下这个地址,可以打开 http://www.mirrorservice.org/sites/download.source ...
-
老司机带你开飞机 一: mssql on linux 安装指导
通常在本机开发环境中需要搭建所有的服务,还要修改本地的hosts,实在是不胜其烦.如今有了docker,完全不用污染本地环境,且看老司机带你搭建一个asp.net core的开发环境集群.愿你走出虚拟 ...
-
servlet请求编码与响应编码问题(编码不一致可能会导致乱码)
html中的编码 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&g ...