百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

10个小技巧,让你的 Python 代码更加优雅

itomcoil 2025-05-03 14:46 6 浏览

10个小技巧改进的 Python 代码,让你的代码更加简洁、更加 Python 化。

1. 用enumerate代替range

如果你需要遍历一个列表,并且需要同时获取索引和元素,大多数情况可能会使用 range(len(data)) 的语法。

比如我们要遍历一个列表,找到所有的负数:

私信小编01即可获取大量Python学习资源

data = [1, 3, -5, 7, 9, -11]
for i in range(len(data)):
	if data[i] < 0:
		print(f"索引:{
   i},元素:{
   data[i]}")

输出:

索引:2,元素:-5
索引:5,元素:-11

虽然这种方法有效,但如果使用 Python 内置的 enumerate 函数会更好,这个函数会返回遍历过程中当前索引和当前元素值作为一个元组,因此可以直接输出索引和值:

data = [1, 3, -5, 7, 9, -11]
for i, v, in enumerate(data):
	if v < 0:
		print(f"索引:{
   i},元素:{
   v}")

输出:

索引:2,元素:-5
索引:5,元素:-11

2. 深入理解list,替代for循环

假如我们要创建一个从0~9的平方数的列表,一种简单的方法是先创建一个 list ,然后通过 for 循环每次将一个数的平方 append 到列表的结尾。

squares = []
for i in range(10):
	squares.append(i ** 2)
print(squares)

输出:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

但其实通过列表生成式,我们有一种更快捷的方法,只需要一行代码就能够实现相同的功能。

squares = [i ** 2 for i in range(10)]
print(squares)

输出:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

3. 通过 Python 内置的sorted()方法对复杂的对象进行排序

排序的需求在很多场景中都很常见,Python中的可迭代对象(列表、元组、字典)都可以进行排序,内置函数 sorted() 让我们甚至都不需要自己实现排序算法。

data = [1, 3, -5, 7, 9, -11]
sortedData = sorted(data)
print(sortedData)

输出:

[-11, -5, 1, 3, 7, 9]

sorted() 方法自动将列表按照升序排序,如果你想按照降序排序,可以使用 sorted() 的参数 reverse = True

sorted() 方法同样也适用于元组类型的数据,但是注意排序的结果将返回一个列表。

data = (1, 3, -5, 7, 9, -11)
print(data)
sortedData = sorted(data)
print(sortedData)

输出:

(1, 3, -5, 7, 9, -11)
[-11, -5, 1, 3, 7, 9]

对于复杂的可迭代对象,比如我们可以创建一个列表,列表中的每一个元素都是一个人的字典信息,然后我们按照每个人的年龄进行排序。

我们可以用 sorted()key 参数,传入一个匿名函数,让排序按照我们预想的方式进行。

data = [{
 "name": "Alex", "age": 18},
        {
 "name": "Band", "age": 21},
        {
 "name": "Coco", "age": 17}]
sorted_data = sorted(data, key=lambda x: x["age"])
print(sorted_data)

输出:

[{'name': 'Coco', 'age': 17}, {'name': 'Alex', 'age': 18}, {'name': 'Band', 'age': 21}]

4. 使用集合Set存储唯一值

如果你有一个包含多个值的列表,并且需要去重,一个不错的技巧是将我们的列表转换为一个集合。

Python的集合是一种无序的数据类型,并且没有重复元素,还提供了不同集合之间的运算,可以求交集、并集和差集。

data = [1, 3, 3, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, 9]
setData = set(data)
print(setData)

输出:

{1, 3, 5, 7, 9}

5. 使用生成器以节省内存

有时候列表并不是最好的选择。假如我们有一个非常大的列表,有10000个元素,我们想计算所有元素的总和,虽然可以用列表来做,当如果数据量特别大的话我们可能会遇到内存问题,更好的解决方案是使用生成器。

dataList = [i for i in range(10000)]
print(sum(dataList))
dataGen = (i for i in range(10000))
print(sum(dataGen))

输出:

列表生成式与生成器具有相同的语法,不同点在于列表生成式使用的是中括号,而生成器使用的是小括号。

生成器通过类似于懒加载的方式计算我们需要的元素,因此它一次只生成一个元素,并且只在需要的时候才生成。

我们可以使用 sysgetsize() 方法看一下列表和生成器的大小。

import sys

dataList = [i for i in range(10000)]
print(sys.getsizeof(dataList), "bytes")

dataGen = (i for i in range(10000))
print(sys.getsizeof(dataGen), "bytes")

输出:

85176 bytes
112 bytes

6. 在字典中获取元素使用.get()并且设置默认值

假设我们有一个字典,其中包括不同的键,比如商品和价格,在我们的代码中的某个点,想要获得商品的价格。

当我们用 [] 简单的访问键时,如果键不在字典中,那么代码将会报错,引发一个 KeyError

dataDict = {
 
        "name": "Tesla",
        "price": 250000
}
print(dataDict["count"])

报错:

Traceback (most recent call last):
  File "mian.py", line 5, in <module>
    print(dataDict["count"])
KeyError: 'count'

更好的方式是使用 .get() 方法,此时如果键不存在,则不会引发 KeyError ,而是返回一个默认值,如果我们不指定默认值,它会直接返回None,如果我们指定默认值,那么它会返回我们指定的默认值。

dataDict = {
 
        "name": "Tesla",
        "price": 250000
}
print(dataDict.get("count"))
print(dataDict.get("count", 0))

输出:

None
0

7. 计数器collections.Counter

如果你想计算列表中元素的数量,Python中有一个非常方便的工具。

from collections import Counter

data = [1, 3, 3, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, 9]
counter = Counter(data)

print(counter)

输出:

Counter({9: 5, 7: 4, 5: 3, 3: 2, 1: 1})

Counter 可以统计列表中不同元素的数量,并且按照出现次数降序排列,这比我们自己计算要好得多。

如果你想知道某个元素的个数的话,可以直接通过 [] 访问,如果这个元素不存在,那么将返回0,并且还可以通过 most_common() 方法返回排名靠前的几个元素。

from collections import Counter

data = [1, 3, 3, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, 9]
counter = Counter(data)

print(counter[7])
print(counter[11])
print(counter.most_common(2))

输出:

4
0
[(9, 5), (7, 4)]

8. 使用f-String格式化字符串(适用于Python 3.6+)

f-String在我看来是最佳的格式化字符串方法,我们只需要在字符串前写一个f,然后在字符串内部可以直接使用大括号来嵌入变量或表达式。

data = {
 "name": "Alex", "age": 18}
string = f"I'm {
   data['name']} and I am {
   data['age']} years old."
print(string)

输出:

I'm Alex and I am 18 years old.

这种方式更简单、更简洁、速度也更快。

9. 使用.join()拼接字符串

假如我们有一个包含不同字符串的列表,我们想把所有的字符串通过空格拼接在一起,千万不要再用 for 循环一个一个遍历然后拼接了,一种更简洁的方法是通过 .joint() 方法,它可以使用指定的字符将字符串拼接起来。

strings = ["Hello", "World", "!"]
print(" ".join(strings))
print("_".join(strings))

输出:

Hello World !
Hello_World_!

10. 使用双星号语法合并字典(适用于Python 3.5+)

如果我们有两个字典,并且希望将其合并成一个,此时我们可以使用双星号 ** 和大括号 {} 语法。

info1 = {
 "name": "Alex", "age": 18}
info2 = {
 "name": "Alex", "city": "Bei Jing"}
info = {
 **info1, **info2}
print(info)

输出:

{'name': 'Alex', 'age': 18, 'city': 'Bei Jing'}

以上就是这篇文章跟大家分享的小技巧。

如果你觉得这篇文章对你有帮助的话,欢迎一键三连~

相关推荐

PS小技巧 调整命令,让人物肤色变得更加白皙 #后期修图

我们来看一下如何去将人物的皮肤变得更加的白皙。·首先选中图层,Ctrl键加J键复制一层。·打开这里的属性面板,选择快速操作删除背景,这样就会将人物进行单独的抠取。·接下来在上方去添加一个黑白调整图层,...

把人物肤色提亮的方法和技巧

PS后期调白肤色提亮照片的方法。一白遮百丑,所以对于Photoshop后期来说把人物肤色调白是一项非常重要的任务。就拿这张素材图片来说,这张素材图片人脸的肤色主要偏红、偏黄,也不够白皙,该怎样对它进行...

《Photoshop教程》把美女图片调成清爽色彩及润肤技巧

关注PS精品教程,每天不断更新~~室内人物图片一般会偏暗,人物脸部、肤色及背景会出现一些杂点。处理之前需要认真的给人物磨皮及美白,然后再整体润色。最终效果原图一、用修补工具及图章工具简单去除大一点的黑...

PS后期对皮肤进行美白的技巧

PS后期进行皮肤美白的技巧。PS后期对皮肤进行美白的技巧:·打开素材图片之后直接复制原图。·接下来直接点击上方的图像,选择应用图像命令。·在通道这里直接选择红通道,混合这里直接选择柔光,然后点击确定。...

493 [PS调色]调模特通透肤色

效果对比:效果图吧:1、光位图:2、拍摄参数:·快门:160;光圈:8;ISO:1003、步骤分解图:用曲线调整图层调出基本色调。用可选颜色调整图层调整红色、黄色、白色和灰色4种颜色的混合比例。用色彩...

先选肤色再涂面部,卡戴珊的摄影师透露:为明星拍完照后怎么修图

据英国媒体12月17日报道,真人秀明星金·卡戴珊终于承认,她把女儿小北P进了家族的圣诞贺卡,怪不得粉丝们都表示这张贺卡照得非常失败。上周,这位39岁的女星遭到了一些粉丝针对这张照片的批评,她于当地时间...

如何在PS中运用曲线复制另一张照片的色调

怎样把另一张作品的外观感觉,套用到自己的照片上?单靠肉眼来猜,可能很不容易,而来自BenSecret的教学,关键是在PS使用了两个工具,让你可以准确比较两张照片的曝光、色调与饱和度,方便你调整及复制...

PS在LAB模式下调出水嫩肤色的美女

本PS教程主要使用Photoshop使用LAB模式调出水嫩肤色的美女,教程调色比较独特。作者比较注重图片高光部分的颜色,增加质感及肤色调红润等都是在高光区域完成。尤其在Lab模式下,用高光选区调色后图...

在Photoshop图像后期处理中如何将人物皮肤处理得白皙通透

我们在人像后期处理中,需要将人物皮肤处理的白皙通透,处理方法很多,大多数都喜欢使用曲线、磨皮等进行调整,可以达到亮但是不透,最终效果往往不是很好,今天就教大家一种如何将任务皮肤处理得白皙通透,希望能帮...

PS调色自学教程:宝宝照片快速调通透,简单实用!

PS调色自学教程:宝宝照片快速调通透。·首先复制图层,然后选择进入ACR滤镜,选择曲线锁定照片的亮部,也就高光位置,其他部位补亮一点,尤其是阴影的部位补亮多一些,让画面的层次均匀一点。·然后回到基本项...

【干货】如何利用PS进行人物美化

人物图像美化在Photoshop中非常常用,Photoshop作为一款功能强大的图像处理软件,不仅可以对人像进行基本的调色、美化和修复等处理,还可以改变人物的线条和幅度,如调整脸部器官和脸型的大小、调...

教大家一种可以快速把肤色处理均匀的方法@抖音短视频

快速把肤色处理均匀的方法。今天教大家一种可以快速把肤色处理均匀的方法。像这张照片整体肤色走紫红色,但是局部偏黄缘处理起来非常的麻烦。其实我们只需要新建空白图层,图层混合模式更改为颜色,再选择画笔工具把...

PS调色教程 利用RAW调出干净通透的肤色

要么不发,要么干货。后期教程来噜~用RAW调出干净通透的肤色。这次终于不会原片比PS后好看了吧。如果你依然这么觉得,请不要残忍的告诉我这个事实,泪谢TAT)附送拍摄花絮,感谢各位的支持更多风格请关注m...

photoshop后期皮肤变白的技巧

PS后期皮肤变白的技巧。1.PS后期让皮肤变白的方法有很多种,接下来教你一种非常简单容易上手的方法。2.打开素材图片之后,直接在小太极下拉框的位置添加一个纯色调整图层,颜色设置一个纯白色,点击...

Photoshop调出人物的淡雅粉嫩肤色教程

本教程主要使用Photoshop调出人物的淡雅粉嫩肤色教程,最终的效果非常的通透迷人,下面让我们一起来学习.出自:86ps效果图:原图:1、打开原图复制一层。2、用Topaz滤镜磨皮(点此下载)。3、...