一些让Python代码简洁的实用技巧总结

目录
  • 前言
  • 1. 使用Lambda来修改Pandas数据框中的值
  • 2. 使用f-string来连接字符串
  • 3. 用Zip()函数对多个列表进行迭代
  • 4. 使用列表理解法
  • 5. 对文件对象使用with语句
  • 6. 停止使用方括号来获取字典项, 利用.get()代替
  • 7. 多重赋值
  • 总结

前言

众所周知,编写Python代码在开始时十分容易,但随着你在工具包中添加更多的库,你的脚本可能会有不必要的代码行,变得冗长而混乱。可能短期内能够应付工作,但长期来看,麻烦不小。

在这篇文章中,我将与你分享7个技巧,使你在使用Python进行数据科学时更加简洁。这涵盖了我们日常所做的事情,例如修改Pandas数据框中的值,连接字符串,读取文件等操作!

1. 使用Lambda来修改Pandas数据框中的值

假设我们有以下df数据框:

data = [[1,2,3], [4,5,6], [7,8,9]]
df = pd.DataFrame(data, columns=[0,1,2])
IN[1]: print (df)
OUT[1]:    0  1  2
        0  1  2  3
        1  4  5  6
        2  7  8  9

现在由于某种原因,你需要在第0列的数字上添加01的值。一个常见的方法是定义一个函数来完成这个任务,然后用 apply 函数来修改一列的值。

def add_numbers(x):
    return f'{x}01'
df[0] = df[0].apply(add_numbers)
IN[1]: print (df)
OUT[1]:     0   1   2
        0  101  2   3
        1  401  5   6
        2  701  8   9

这并不复杂,但是在数据框中对每一个改变创建一个函数是不切实际的。这时lambda就派上了用场。

lambda函数类似于普通的Python函数,但它可以不使用名称来定义,这使得它成为一个漂亮的单行代码。之前使用的代码可以用以下方式来减少。

df[0] = df[0].apply(lambda x:f'{x}01')

当你不知道是否可以访问一个系列的属性来修改数据时,Lambda变得非常有用。

例如,列0包含字母,我们想把它们大写。

# 如果你知道.str的存在,你可以这样做
df[0] = df[0].str.title()
# 如果你不知道.str,你仍然可以用lambda大写
df[0] = df[0].apply(lambda x: x.title())

2. 使用f-string来连接字符串

字符串连接是Python中非常常见的操作,它可以用不同的方法来完成。最常见的方法是使用+运算符;然而,这个运算符的一个问题是我们不能在字符串之间添加任何分隔符。

当然,如果你想把 "Hello "和 "World "连接起来,一个典型的变通方法是添加一个空白分隔符(" ")。

print("Hello" + " " + "World")

这就完成了工作,但为了写出更可读的代码,我们可以用一个f-string来代替它。

IN[2]: print(f'{Hello} {World}')
OUT[2]: "Hello World"

在一个基本的例子中,这似乎是不必要的,但是当涉及到连接多个值时(正如你将在提示#3中看到的),f-string将使你免于书写多次+ " " +。我不知道过去有多少次不得不写+运算符,但现在不会了!

其他连接字符串的方法是使用join()方法或format()函数,然而f-string在字符串连接方面做得更好。

3. 用Zip()函数对多个列表进行迭代

你是否曾经想在 Python 中循环遍历一个以上的列表?当你有两个列表时,你可以用 enumerate 来实现。

teams = ['Barcelona', 'Bayern Munich', 'Chelsea']
leagues = ['La Liga', 'Bundesliga', 'Premiere League']
for i, team in enumerate(teams):
    league = leagues[i]
    print(f'{team} plays in {league}')

然而,当你有两个或更多的列表时,这变得不切实际。一个更好的方法是使用zip()函数。zip()函数接收迭代数据,将它们聚集在一个元组中,并返回之。

让我们再增加一个列表,看看zip()的威力!

teams = ['Barcelona', 'Bayern Munich', 'Chelsea']
leagues = ['La Liga', 'Bundesliga', 'Premiere League']
countries = ['Spain', 'Germany', 'UK']
for team, league, country in zip(teams, leagues, countries):
    print(f'{team} plays in {league}. Country: {country}')

上述代码的输出结果为:

Barcelona plays in La Liga. Country: Spain
Bayern Munich plays in Bundesliga. Country: Germany
Chelsea plays in Premiere League. Country: UK

此处你注意到我们在这个例子中使用了f-string吗?代码变得更有可读性,不是吗?

4. 使用列表理解法

清洗和处理数据的一个常见步骤是修改现有的列表。比如,我们有以下需要大写的列表:

words = ['california', 'florida', 'texas']

将words列表的每个元素大写的典型方法是创建一个新的大写列表,执行一次 for 循环,使用.title(),然后将每个修改的值附加到新的列表中。

capitalized = []
for word in words:
    capitalized.append(word.title())

然而,Pythonic的方法是使用列表理解来做到这一点。列表理解有一种优雅的方法来制作列表。

你可以用一行代码重写上面的for循环:

capitalized = [word.title() for word in words]

由此我们可以跳过第一个例子中的一些步骤,结果是一样的。

5. 对文件对象使用with语句

当在一个项目上工作时,我们经常会对文件进行读写操作。最常见的方法是使用open()函数打开一个文件,它会创建一个我们可以操作的文件对象,然后作为一个习惯的做法,我们应该使用close()关闭该文件对象。

f = open('dataset.txt', 'w')
f.write('new_data')
f.close()

这很容易记住,但有时写了几个小时的代码,我们可能会忘记用f.close()关闭f文件。这时,with语句就派上了用场。with语句将自动关闭文件对象f,形式如下:

with open('dataset.txt', 'w') as f:
    f.write('new_data')

有了这个,我们可以保持代码的简短。

你不需要用它来读取CSV文件,因为你可以用pandas的 pd.read_csv()轻松地读取,但在读取其他类型的文件时,这仍然很有用。例如,从pickle文件中读取数据时经常使用它。

import pickle
# 从pickle文件中读取数据集
with open(‘test', ‘rb') as input:
    data = pickle.load(input)

6. 停止使用方括号来获取字典项, 利用.get()代替

比如,有以下一个字典:

person = {'name': 'John', 'age': 20}

我们可以通过person[name]和person[age]分别获得姓名和年龄。但是,由于某种原因,我们想获得一个不存在的键,如 "工资",运行person[salary]会引发一个`KeyError'。

这时,get()方法就有用了。如果键在字典中,get()方法返回指定键的值,但是如果没有找到键,Python 将返回None。得益于此,你的代码不会中断。

person = {'name': 'John', 'age': 20}
print('Name: ', person.get('name'))
print('Age: ', person.get('age'))
print('Salary: ', person.get('salary'))

输出结果如下:

Name:  John
Age:  20
Salary:  None

7. 多重赋值

你是否曾想减少用于创建多个变量、列表或字典的代码行数?那么,你可以用多重赋值轻松做到这一点。

# 原始操作
a = 1
b = 2
c = 3
# 替代操作
a, b, c = 1, 2, 3
# 代替在不同行中创建多个列表
data_1 = []
data_2 = []
data_3 = []
data_4 = []
# 可以在一行中创建它们的多重赋值
data_1, data_2, data_3, data_4 = [], [], [], []
# 或者使用列表理解法
data_1, data_2, data_3, data_4 = [[] for i in range(4)]

原文链接:

https://towardsdatascience.com/7-tips-to-level-up-your-python-code-for-data-science-4a64dbccd86d

总结

到此这篇关于让Python代码简洁的实用技巧的文章就介绍到这了,更多相关Python代码简洁技巧内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python简单基础小程序的实例代码

    1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i,'=',i*j,end = ' ',sep='') # end默认在结尾输出换行,将它改成空格 sep 默认 j,'*',i,'=',i*j 各元素输出中间会有空格 print()#这里作用是输出换行符 i = 1 while i <= 9: j = 1 while j <= i: print(&

  • 三个python爬虫项目实例代码

    这篇文章主要介绍了三个python爬虫项目实例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 爬取内涵段子: #encoding=utf-8 import urllib2 import re class neihanba(): def spider(self): ''' 爬虫的主调度器 ''' isflow=True#判断是否进行下一页 page=1 while isflow: url="http://www.neihanpa.com/ar

  • python代码过长的换行方法

    python代码换行就是每行后面加个 \ 举个栗子: time = "2017" print "one" + "," \ + "two" \ + ",three" + \ "," + time 打印出来就是: one,two,three,2017 再举一个栗子: print "this line is toooooooooooo \ long" 打印出来: this

  • python下10个简单实例代码

    注意:我用的python2.7,大家如果用Python3.0以上的版本,请记得在print()函数哦!如果因为版本问题评论的,不做回复哦!!! 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源代码: # -*- coding: UTF-8 -*- for i in range(1,5): for j in range(1,5): for k in r

  • python 字符串格式化代码

    格式汇总: 格式 描述 格式 描述 %% 百分号%标记(多出来的%是转义作用)     %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整数(十进制) %o 无符号整数(八进制)     %x 无符号整数(十六进制) %X 无符号整数(十六进制大写字符) %e 浮点数字(科学计数法) %E 浮点数字(科学计数法,用E代替e) %f 浮点数字(用小数点符号)     %g 浮点数字(根据值的不同自动选择%e或%f) %G 浮点数字(类似于%g,根据值的不同自动选择

  • python 顺时针打印矩阵的超简洁代码

    如下所示: # -*- coding:utf-8 -*- class Solution: # matrix类型为二维列表,需要返回列表 def printMatrix(self, matrix): # write code here res=[] n=len(matrix) m=len(matrix[0]) if m==1 and n==1: res=[matrix[0][0]] return res else: for o in range((min(m,n)+1)//2): [res.app

  • 一些让Python代码简洁的实用技巧总结

    目录 前言 1. 使用Lambda来修改Pandas数据框中的值 2. 使用f-string来连接字符串 3. 用Zip()函数对多个列表进行迭代 4. 使用列表理解法 5. 对文件对象使用with语句 6. 停止使用方括号来获取字典项, 利用.get()代替 7. 多重赋值 总结 前言 众所周知,编写Python代码在开始时十分容易,但随着你在工具包中添加更多的库,你的脚本可能会有不必要的代码行,变得冗长而混乱.可能短期内能够应付工作,但长期来看,麻烦不小. 在这篇文章中,我将与你分享7个技巧

  • 分享介绍Python的9个实用技巧

    本文会介绍一些Python大神用的贼溜的技巧,让一探究竟吧!欢迎收藏学习,喜欢点赞支持,欢迎畅聊. 整理字符串输入 整理用户输入的问题在编程过程中很常见.有更好的方法来解决: user_input = "This string has some whitespaces... " character_map = { ord( ) : , ord( ) : , ord( ) : None } user_input.translate(character_map) # This string

  • 分享10提高 Python 代码的可读性的技巧

    目录 1.字符串反转 2.首字母大写 3.查询唯一元素 4.变量交换 5.列表排序 6.列表推导式 7.合并字符串 8.拆分字符串 9.回文串检测 10.统计列表元素出现次数 1. 字符串反转 字符串反转有很多方法,咱们再这里介绍两种:一种是切片,一种是python字符串的reversed方法. # -!- coding: utf-8 -!- string = 'hello world' # 方法1 new_str = string[::-1] ic(new_str) # 方法二 new_str

  • 分享3个简单的Python代码高效运行技巧

    目录 1. 引言 2. 获取字典的值 3. 循环中使用enumerate 4. 使用f-strings来拼接和打印字符串 5. 总结 1. 引言 小伙伴们日常工作中都必不可少地使用Python实现一些简单的功能,但是不同的人所编写的代码执行效率往往是不同的.本文重点介绍大家经常遇到的场景下,三个有效的,方便理解的,执行高效的实用技巧. 闲话少说,我们直接开始吧!!! 2. 获取字典的值 不妨假设我们有以下字典: my_dict = {'first_name': 'Michaela',      

  • Python 代码性能优化技巧分享

    如何进行 Python 性能优化,是本文探讨的主要问题.本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希望可以给 Python 开发人员一定的参考. Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率. 改进算法,选择合适的数据结构 一个

  • 总结python爬虫抓站的实用技巧

    前言 写过的这些脚本有一个共性,都是和web相关的,总要用到获取链接的一些方法,累积不少爬虫抓站的经验,在此总结一下,那么以后做东西也就不用重复劳动了. 1.最基本的抓站 import urllib2 content = urllib2.urlopen('http://XXXX').read() 2.使用代理服务器 这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等. import urllib2 proxy_support = urllib2.ProxyHandler(

  • 初学Python实用技巧两则

    本文记录了初学Python常用的两则实用技巧,分享给大家供大家参考之用.具体如下: 1.可变参数 示例代码如下: >>> def powersum(power, *args): ... '''''Return the sum of each argument raised to specified power.''' ... total = 0 ... for i in args: ... total += pow(i, power) ... return total ... >&

  • Python 实用技巧之利用Shell通配符做字符串匹配

    1.需求 当工作在UNIX Shell下时,我们想使用常见的通配符模式(即:.py,Dat[0-9].csv等)来对文本做匹配. 2.解决方案 fnmatch模块提供了两个函数:fnmatch()和fnmatchcase(),可用来执行这样的匹配,使用起来非常简单. 实例: from fnmatch import fnmatch,fnmatchcase print(fnmatch('mark.txt','*.txt')) print(fnmatch('mark.txt','?ark.txt'))

  • Python二元赋值实用技巧解析

    这篇文章主要介绍了Python二元赋值实用技巧解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python支持类似于a += 3这种二元表达式.比如: a += 3 -> a = a + 3 a -= 3 -> a = a - 3 a *= 3 -> a = a * 3 ... 在python中的某些情况下,这种二元赋值表达式可能比普通的赋值方式效率更高些.原因有二: 二元赋值表达式中,a可能会是一个表达式,它只需计算评估一次,而a

  • python 中的9个实用技巧,助你提高开发效率

    整理字符串输入 整理用户输入的问题在编程过程中极为常见.通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完成这项工作.但是如果问题很复杂,可能有更好的方法来解决: user_input = "This string has some whitespaces... " character_map = { ord( ) : , ord( ) : , ord( ) : None } user_input.translate(character_map) #

随机推荐