分享18 个 Python 高效编程技巧

目录
  • 01 交换变量
  • 02 字典推导(Dictionary comprehensions)和集合推导(Set comprehensions)
  • 03 计数时使用Counter计数对象。
  • 04 漂亮的打印出JSON
  • 05 解决FizzBuzz
  • 06 if 语句在行内
  • 07 连接
  • 08 数值比较
  • 09 同时迭代两个列表
  • 10 带索引的列表迭代
  • 11 列表推导式
  • 12 字典推导
  • 13 初始化列表的值
  • 14 列表转换为字符串
  • 15 从字典中获取元素
  • 16 获取列表的子集
  • 17 迭代工具
  • 18 False True

前言:

初识Python语言,觉得python满足了我上学时候对编程语言的所有要求。python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了。高级语言,如果做不到这样,还扯啥高级呢?

01 交换变量

>>>a=3  

>>>b=6

这个情况如果要交换变量在c++中,肯定需要一个空变量。但是python不需要,只需一行,大家看清楚了

>>>a,b=b,a  

>>>print(a)>>>6  

>>>ptint(b)>>>5

02 字典推导(Dictionary comprehensions)和集合推导(Set comprehensions)

大多数的Python程序员都知道且使用过列表推导(list comprehensions)。如果你对list comprehensions概念不是很熟悉——一个list comprehension就是一个更简短、简洁的创建一个list的方法。

>>> some_list = \[1, 2, 3, 4, 5\]  

>>> another_list = \[ x + 1 for x in some_list \]  

>>> another_list  
\[2, 3, 4, 5, 6\]

自从python 3.1 起,我们可以用同样的语法来创建集合和字典表:

>>> # Set Comprehensions  
>>> some_list = \[1, 2, 3, 4, 5, 2, 5, 1, 4, 8\]  

>>> even_set = { x for x in some_list if x % 2 == 0 }  

>>> even_set  
set(\[8, 2, 4\])  

>>> # Dict Comprehensions  

>>> d = { x: x % 2 == 0 for x in range(1, 11) }  

>>> d  
{1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False, 10: True}

在第一个例子里,我们以some_list为基础,创建了一个具有不重复元素的集合,而且集合里只包含偶数。而在字典表的例子里,我们创建了一个key是不重复的1到10之间的整数,value是布尔型,用来指示key是否是偶数。

这里另外一个值得注意的事情是集合的字面量表示法。

我们可以简单的用这种方法创建一个集合:

>>> my_set = {1, 2, 1, 2, 3, 4}  

>>> my_set  
set(\[1, 2, 3, 4\])  

而不需要使用内置函数set()

03 计数时使用Counter计数对象。

这听起来显而易见,但经常被人忘记。对于大多数程序员来说,数一个东西是一项很常见的任务,而且在大多数情况下并不是很有挑战性的事情——这里有几种方法能更简单的完成这种任务。

Pythoncollections类库里有个内置的dict类的子类,是专门来干这种事情的:

>>> from collections import Counter  
>>> c = Counter( hello world )  

>>> c  
Counter({ l : 3,  o : 2,   : 1,  e : 1,  d : 1,  h : 1,  r : 1,  w : 1})  

>>> c.most_common(2)  
\[( l , 3), ( o , 2)\]  

04 漂亮的打印出JSON

JSON是一种非常好的数据序列化的形式,被如今的各种API和web service大量的使用。使用python内置的json处理,可以使JSON串具有一定的可读性,但当遇到大型数据时,它表现成一个很长的、连续的一行时,人的肉眼就很难观看了。

为了能让JSON数据表现的更友好,我们可以使用indent参数来输出漂亮的JSON。当在控制台交互式编程或做日志时,这尤其有用:

>>> import json  

>>> print(json.dumps(data))  # No indention  
{"status": "OK", "count": 2, "results": \[{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}\]}  

>>> print(json.dumps(data, indent=2))  # With indention  

{  
  "status": "OK",  
  "count": 2,  
  "results": \[  

    {  
      "age": 27,  
      "name": "Oz",  

      "lactose_intolerant": true  
    },  
    {  
      "age": 29,  

      "name": "Joe",  
      "lactose_intolerant": false  
    }  
  \]  

}

同样,使用内置的pprint模块,也可以让其它任何东西打印输出的更漂亮。

05 解决FizzBuzz

前段时间Jeff Atwood 推广了一个简单的编程练习叫FizzBuzz,问题引用如下:

写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz”。

这里就是一个简短的,有意思的方法解决这个问题:

for x in range(1,101):  
    print"fizz"\[x%3*len( fizz )::\]+"buzz"\[x%5*len( buzz )::\] or x

06 if 语句在行内

print "Hello" if True else "World"  
>>> Hello

07 连接

下面的最后一种方式在绑定两个不同类型的对象时显得很cool

nfc = \["Packers", "49ers"\]  
afc = \["Ravens", "Patriots"\]  
print nfc + afc  
>>> \[ Packers ,  49ers ,  Ravens ,  Patriots \]  

print str(1) + " world"  
>>> 1 world  

print \`1\` + " world"  
>>> 1 world  

print 1, "world"  
>>> 1 world  
print nfc, 1  
>>> \[ Packers ,  49ers \] 1

08 数值比较

这是我见过诸多语言中很少有的如此棒的简便法

x = 2  
if 3 > x > 1:  
   print x  
>>> 2  
if 1  0:  
   print x  
>>> 2

09 同时迭代两个列表

nfc = \["Packers", "49ers"\]  
afc = \["Ravens", "Patriots"\]  
for teama, teamb in zip(nfc, afc):  
     print teama + " vs. " + teamb  
>>> Packers vs. Ravens  
>>> 49ers vs. Patriots

10 带索引的列表迭代

teams = \["Packers", "49ers", "Ravens", "Patriots"\]  
for index, team in enumerate(teams):  
    print index, team  
>>> 0 Packers  
>>> 1 49ers  
>>> 2 Ravens  
>>> 3 Patriots

11 列表推导式

已知一个列表,我们可以刷选出偶数列表方法:

numbers = \[1,2,3,4,5,6\]  
even = \[\]  
for number in numbers:  
    if number%2 == 0:  
        even.append(number)

转变成如下:

numbers = \[1,2,3,4,5,6\]  
even = \[number for number in numbers if number%2 == 0\]

12 字典推导

和列表推导类似,字典可以做同样的工作:

teams = \["Packers", "49ers", "Ravens", "Patriots"\]  
print {key: value for value, key in enumerate(teams)}  
>>> { 49ers : 1,  Ravens : 2,  Patriots : 3,  Packers : 0}

13 初始化列表的值

items = \[0\]*3  
print items  
>>> \[0,0,0\]

14 列表转换为字符串

teams = \["Packers", "49ers", "Ravens", "Patriots"\]  
print ", ".join(teams)  
>>>  Packers, 49ers, Ravens, Patriots

15 从字典中获取元素

我承认try/except代码并不雅致,不过这里有一种简单方法,尝试在字典中找key,如果没有找到对应的alue将用第二个参数设为其变量值。

data = { user : 1,  name :  Max ,  three : 4}  
try:  
   is_admin = data\[ admin \]  
except KeyError:  
   is_admin = False

替换成这样:

data = { user : 1,  name :  Max ,  three : 4}  
is_admin = data.get( admin , False)

16 获取列表的子集

有时,你只需要列表中的部分元素,这里是一些获取列表子集的方法。

x = \[1,2,3,4,5,6\]  
#前3个  
print x\[:3\]  
>>> \[1,2,3\]  
#中间4个  
print x\[1:5\]  
>>> \[2,3,4,5\]  
#最后3个  
print x\[3:\]  
>>> \[4,5,6\]  
#奇数项  
print x\[::2\]  
>>> \[1,3,5\]  
#偶数项  
print x\[1::2\]  
>>> \[2,4,6\]

除了python内置的数据类型外,在collection模块同样还包括一些特别的用例,在有些场合Counter非常实用。如果你参加过在这一年的Facebook HackerCup,你甚至也能找到他的实用之处。

from collections import Counter  
print Counter("hello")  
>>> Counter({ l : 2,  h : 1,  e : 1,  o : 1})

17 迭代工具

collections库一样,还有一个库叫itertools,对某些问题真能高效地解决。其中一个用例是查找所有组合,他能告诉你在一个组中元素的所有不能的组合方式

from itertools import combinations  
teams = \["Packers", "49ers", "Ravens", "Patriots"\]  
for game in combinations(teams, 2):  
    print game  
>>> ( Packers ,  49ers )  
>>> ( Packers ,  Ravens )  
>>> ( Packers ,  Patriots )  
>>> ( 49ers ,  Ravens )  
>>> ( 49ers ,  Patriots )  
>>> ( Ravens ,  Patriots )

18 False True

比起实用技术来说这是一个很有趣的事,在python中,True和False是全局变量,因此:

False = True  
if False:  
   print "Hello"  
else:  
   print "World"  
>>> Hello

到此这篇关于分享18 个 Python 高效编程技巧的文章就介绍到这了,更多相关Python 高效编程技巧内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python编程控制Android手机操作技巧示例

    目录 你应该拥有的东西 安装 开始 轻敲 截图 高级点击 TemplateMatching 滑动 打电话给某人 从手机下载文件到电脑 手机录屏 打开手机 发送 Whatsapp 消息 几天前我在考虑使用 python 从 whatsapp 发送消息.和你们一样,我开始潜伏在互联网上寻找一些解决方案并找到了关于twilio. 一开始,是一个不错的解决方案,但它不是免费的,我必须购买一个 twilio 电话号码.此外,我无法在互联网上找到任何可用的 whatsapp API.所以我放弃了使用 twi

  • 3个 Python 编程技巧

    目录 1.如何按照字典的值的大小进行排序 2.优雅的一次性判断多个条件 3.如何优雅的合并两个字典 今天分享 3 个 Python 编程小技巧,来看看你是否用过? 1.如何按照字典的值的大小进行排序 我们知道,字典的本质是哈希表,本身是无法排序的,但 Python 3.6 之后,字典是可以按照插入的顺序进行遍历的,这就是有序字典,其中的原理,可以阅读为什么 Python3.6 之后字典是有序的. 知道了这一点,就好办了,先把字典的键值对列表排序,然后重新插入新的字典,这样新字典就可以按照值的大小

  • Python编程技巧连接列表的八种操作方法

    目录 1. 最直观的相加 2. 借助 itertools 3. 使用 * 解包 4. 使用 extend 5. 使用列表推导式 6. 使用 heapq 8. 使用 yield from Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的.在这些人的眼里,能够写出那些一般开发者看不懂的高级特性,就是高手,就是大神. 但你要知道,在团队合作里,炫技是大忌. 为什么这么说呢?我说下自己的看法: 越简洁的代码,越清晰的逻辑,就越不容易出错: 在团队合作中,你的代

  • Python 高效编程技巧分享

    一.根据条件在序列中筛选数据 假设有一个数字列表 data, 过滤列表中的负数 data = [1, 2, 3, 4, -5] # 使用列表推导式 result = [i for i in data if i >= 0] # 使用 fliter 过滤函数 result = filter(lambda x: x >= 0, data) 学生的数学分数以字典形式存储,筛选其中分数大于 80 分的同学 from random import randint d = {x: randint(50, 10

  • 3 个超有用的 Python 编程小技巧

    目录 1.如何按照字典的值的大小进行排序 2.优雅的一次性判断多个条件 3.如何优雅的合并两个字典 1.如何按照字典的值的大小进行排序 我们知道,字典的本质是哈希表,本身是无法排序的,但 Python 3.6 之后,字典是可以按照插入的顺序进行遍历的,这就是有序字典,其中的原理,可以阅读 Python3.6 之后字典是有序的? . 知道了这一点,就好办了,先把字典的键值对列表排序,然后重新插入新的字典,这样新字典就可以按照值的大小进行遍历输出. 代码如下: >>> xs = {'a':

  • 分享18 个 Python 高效编程技巧

    目录 01 交换变量 02 字典推导(Dictionary comprehensions)和集合推导(Set comprehensions) 03 计数时使用Counter计数对象. 04 漂亮的打印出JSON 05 解决FizzBuzz 06 if 语句在行内 07 连接 08 数值比较 09 同时迭代两个列表 10 带索引的列表迭代 11 列表推导式 12 字典推导 13 初始化列表的值 14 列表转换为字符串 15 从字典中获取元素 16 获取列表的子集 17 迭代工具 18 False

  • Python高效编程技巧

    下面我挑选出的这几个技巧常常会被人们忽略,但它们在日常编程中能真正的给我们带来不少帮助. 1. 字典推导(Dictionary comprehensions)和集合推导(Set comprehensions) 大多数的Python程序员都知道且使用过列表推导(list comprehensions).如果你对list comprehensions概念不是很熟悉--一个list comprehension就是一个更简短.简洁的创建一个list的方法. >>> some_list = [1,

  • 符合语言习惯的 Python 优雅编程技巧【推荐】

    Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然.要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests.flask.tornado,下面列举一些常见的Pythonic写法. 0. 程序必须先让人读懂,然后才能让计算机执行. "Programs must be written for people to read, and only incidentally f

  • 18 个 Python 编程技巧,提高工作效率

    目录 01交换变量 02字典推导(Dictionarycomprehensions)和集合推导(Setcomprehensions) 03计数时使用Counter计数对象. 04漂亮的打印出JSON 05解决FizzBuzz 06if语句在行内 07连接 08数值比较 09同时迭代两个列表 10带索引的列表迭代 11列表推导式 12字典推导 13初始化列表的值 14列表转换为字符串 15从字典中获取元素 16获取列表的子集 17迭代工具 18FalseTrue 前言: 初识Python语言,觉得

  • Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解

    本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 filedialog 介绍 使用 首发时间:2018-03-04 22:18 messagebox: 介绍:messagebox是tkinter中的消息框.对话框 使用: 导入模块:import tkinter.messagebox 选择消息框的模式: 提示消息框:[返回"ok"] tkint

  • Python网络编程使用select实现socket全双工异步通信功能示例

    本文实例讲述了Python网络编程使用select实现socket全双工异步通信功能.分享给大家供大家参考,具体如下: 在前面一篇<Python网络编程之TCP套接字简单用法>中,我们实现了tcp客户端与服务器的通信,但是功能十分局限,发送消息与接收消息不能同时进行. 接下来我将通过select这个模块,来实现全双工通信(随时可以接收信息以及发送信息),当然,用多线程也可以完成,这是后话. 那么,select为何物? select  -在单线程网络服务中器程序中,管理多个套接字连接 selec

  • Python网络编程基于多线程实现多用户全双工聊天功能示例

    本文实例讲述了Python网络编程基于多线程实现多用户全双工聊天功能.分享给大家供大家参考,具体如下: 在前面一篇<Python网络编程使用select实现socket全双工异步通信功能>中,我们实现了1对1的异步通信,在文章结尾,给出了多对多通信的思路. 既然说了,咱就动手试一试,本次用的是多线程来实现,正好练练手- 首先讲一下思路: 我们将服务器做为中转站来处理信息,一方面与客户端互动,另一方面进行消息转发. 大体思路确定下来后,需要确定一些通信规则: 1. 客户端与服务器建立连接后,需要

  • Python GUI编程完整示例

    本文实例讲述了Python GUI编程.分享给大家供大家参考,具体如下: import os from time import sleep from tkinter import * from tkinter.messagebox import showinfo class DirList(object): def __init__(self, initdir=None): self.top = Tk() self.label = Label(master=self.top, text='Dir

  • Python网络编程之使用TCP方式传输文件操作示例

    本文实例讲述了Python网络编程之使用TCP方式传输文件操作.分享给大家供大家参考,具体如下: TCP文件下载器 客户端 需求:输入要下载的文件名,从服务器端将文件拷贝到本地 步骤: 1.创建TCP套接字,绑定端口 2.连接服务端 3.输入要下载的文件名 4.将文件名编码,并发送到服务端 5.接收服务端返回的数据 6.关闭套接字 代码 # 导入模块 import socket # 创建套接字 tcp_client_socket = socket.socket(socket.AF_INET, s

随机推荐