原文链接: 我写的 Python 代码,同事都说好

人生苦短,我用 Python。

程序员的追求就是不写代码,早日财务自由。不对,一不小心把实话说出来了,应该是将代码写得简洁,优雅。

Python 程序员的追求则是 Pythonic,正好在 Python 这门语言中,「隐藏」了特别多方法,可以使代码变得简洁,优雅,与众不同。

我在这里总结了一些常用操作,特别是关于列表和字典,分享给大家。

第一个字母大写

这个方法有点意思,无意中发现的。

>>> s = "programming is awesome"
>>> print(s.title())
Programming Is Awesome

列表合并

第一种方式:使用 +

>>> a + b
[1, 2, 3, 4, 5, 6]

第二种方式:使用 extend 关键字。

>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

后两种方式明显更加优雅,推荐使用。需要说明的一点是,如果列表很大的话,+ 会比较慢,使用 extend 更好。

列表元素去重

使用 set() 对列表元素进行去重。

>>> a = [1, 2, 3, 4, 2, 3]
>>> list(set(a))
[1, 2, 3, 4]

列表排序

使用 sort() 或内建函数 sorted() 对列表进行排序。它们之间的区别有两点:

  1. sort() 方法是对原列表进行操作,而 sorted() 方法会返回一个新列表,不是在原来的基础上进行操作。
  2. sort() 是应用在列表上的方法,而 sorted() 可以对所有可迭代的对象进行排序操作。
# sort()
>>> a = [1, 2, 3, 4, 2, 3]
>>> a.sort()
>>> a
[1, 2, 2, 3, 3, 4]
>>>
>>> a = [1, 2, 3, 4, 2, 3]
>>> a.sort(reverse=True)
>>> a
[4, 3, 3, 2, 2, 1] # sorted()
>>> a = [1, 2, 3, 4, 2, 3]
>>> sorted(a)
[1, 2, 2, 3, 3, 4]
>>> a = [1, 2, 3, 4, 2, 3]
>>> sorted(a, reverse=True)
[4, 3, 3, 2, 2, 1]

遍历列表的索引和元素对

使用 enumerate() 函数可以同时输出索引和元素值。

>>> a = ['python', 'go', 'java']
>>> for i, v in enumerate(a):
... print(i, v) # output
0 python
1 go
2 java

查找列表中出现最频繁的元素

使用 max() 函数可以快速查找出一个列表中出现频率最高的某个元素。

>>> a = [1, 2, 3, 4, 3, 4, 5, 4, 4, 2]
>>> b = max(set(a), key=a.count)
>>> b
4

需要说明的一点是,当列表中有两个元素出现的次数相同时,会返回第一个出现的元素。

>>> a = [1, 2]
>>> b = max(set(a), key=a.count)
>>> b
1

统计列表中所有元素的出现次数

前面的代码给出了出现最频繁的值。如果想要知道列表中所有元素的出现次数,那么可以使用 collections 模块。

collections 是 Python 中的一个宝藏模块,它提供了很多特性。Counter 方法正好可以完美解决这个需求。

>>> from collections import Counter
>>>
>>> a = [1, 2, 3, 4, 3, 4, 5, 4, 4, 2]
>>> Counter(a)
Counter({4: 4, 2: 2, 3: 2, 1: 1, 5: 1})

将两个列表合并为字典

使用 zip() 函数,可以将两个列表合并成字典。

>>> a = ['one', 'tow', 'three']
>>> b = [1, 2, 3]
>>> dict(zip(a, b))
{'one': 1, 'tow': 2, 'three': 3}

求两个列表的交集,并集和差集

# list_operate.py

def main():
list_a = [1, 2, 3, 4, 5]
list_b = [4, 5, 6, 7, 8] # 求交集的两种方式
res_a = [i for i in list_a if i in list_b]
res_b = list(set(list_a).intersection(set(list_b))) print(f"res_a is: {res_a}")
print(f"res_b is: {res_b}") # 求并集
res_c = list(set(list_a).union(set(list_b)))
print(f"res_c is: {res_c}") # 求差集的两种方式,在B中但不在A中
res_d = [i for i in list_b if i not in list_a]
res_e = list(set(list_b).difference(set(list_a))) print(f"res_d is: {res_d}")
print(f"res_e is: {res_e}") if __name__ == '__main__':
main()

字典创建

# 1、创建空字典
a = {}
b = dict() # 2、有初始值,从输入的便利程度来说,我更喜欢第二种
a = {'a': 1, 'b': 2, 'c': 3}
b = dict(a=1, b=2, c=3) # 3、key 来自一个列表,而 value 相同, 使用 fromkeys,那是相当的优雅
keys = ['a', 'b', 'c']
value = 100
d = dict.fromkeys(keys, value) # 4、key 来自一个列表,而 value 也是一个列表,使用 zip
keys = ['a', 'b', 'c']
values = [1, 2, 3]
d = dict(zip(keys, values))

字典合并

m = {'a': 1}
n = {'b': 2, 'c': 3} # 合并,两种方式
# 1、使用 update
m.update(n)
# 2、使用 **
{**m, **n}

判断 key 是否存在

在 Python2 中判断某个 key 是否存在,可以使用 has_key,但这个方法在 Python3 中已经被移除了。

另一种方法是使用 in 关键字,不仅兼容 Python2 和 Python3,速度还更快,强烈推荐。

d = {'a': 1, 'b': 2}
if 'a' in d:
print('hello')

获取字典中的值

d = {'a': 1, 'b': 2}

# 1、直接用 key 取值,但这种方式不好,如果 key 不存在会报错,推荐使用 get
a = d['a'] # 2、使用 get,如果 key 不存在还可以赋默认值
a = d.get('a')
c = d.get('c', 3)

字典遍历

d = {'a': 1, 'b': 2, 'c': 3}

# 遍历 key
for key in d.keys():
pass # 遍历 value
for value in d.values():
pass # 遍历 key 和 value
for key, value in d.items():
pass

字典推导式

列表推导式和字典推导式是我相当喜欢的功能,简洁高效。mapfilter 我都已经快不会用了。

l = [1, 2, 3]
{n: n * n for n in l}
{1: 1, 2: 4, 3: 9}

字典按 key 或 value 排序

d = {'a': 1, 'b': 2, 'e': 9, 'c': 5, 'd': 7}

# 按 key 排序
sorted(d.items(), key=lambda t: t[0])
# 按 key 倒序
sorted(d.items(), key=lambda t: t[0], reverse=True) # 按 value 排序
sorted(d.items(), key=lambda t: t[1])

还有一个需求是我在开发过程经常碰到的,就是有一个列表,列表的元素是字典,然后按字典的 value 对列表进行排序。

l = [{'name': 'a', 'count': 4}, {'name': 'b', 'count': 1}, {'name': 'd', 'count': 2}, {'name': 'c', 'count': 6}]
sorted(l, key=lambda e: e.__getitem__('count'))
# 倒序
sorted(l, key=lambda e: e.__getitem__('count'), reverse=True)

以上就是本文的全部内容,如果觉得还不错的话,欢迎点赞转发关注,感谢支持。


推荐阅读:

我写的 Python 代码,同事都说好的更多相关文章

  1. 将自己写的Python代码打包放到PyPI上

    如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index).刚开始我以为要将代码打包放到PyPI上是一件非常复 ...

  2. 我写的python代码的规则

    1.Python文件的命名: 采用每个单词的首字母大写,不使用下划线 2.Python类的命名: 采用每个单词的首字母大写,不使用下划线 3.Python包名的命名:采用每个单词都是小写,不使用下划线 ...

  3. 手写算法-python代码实现KNN

    原理解析 KNN-全称K-Nearest Neighbor,最近邻算法,可以做分类任务,也可以做回归任务,KNN是一种简单的机器学习方法,它没有传统意义上训练和学习过程,实现流程如下: 1.在训练数据 ...

  4. 【MaixPy3文档】写好 Python 代码!

    本文是给有一点 Python 基础但还想进一步深入的同学,有经验的开发者建议跳过. 前言 上文讲述了如何认识开源项目和一些编程方法的介绍,这节主要来说说 Python 代码怎么写的一些演化过程和可以如 ...

  5. 你写的 Python 代码总是不规范?用它!

    今天咱们来说说 代码风格 ! 不同的编程语言 有不同的代码风格 ​ ​ ​ ​ ​ Python 的代码规范 就是人们常说的 PEP8 ​ ​ 在这个网站 https://www.python.org ...

  6. 如何优雅的写好python代码?

    Python与其他语言(比如 java或者 C ++ )相比有较大的区别,其中最大的特点就是非常简洁,如果按照其他语言的思路老师写Python代码,则会使得代码繁琐复杂,并且容易出现bug,在Pyth ...

  7. 让Python代码更快运行的 5 种方法

    不论什么语言,我们都需要注意性能优化问题,提高执行效率.选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足之处,那就是执行效率和性能不够亮.尽管Python从未如C和 ...

  8. Golang 调用 Python 代码

    go 中的 cgo 模块可以让 go 无缝调用 c 或者 c++ 的代码,而 python 本身就是个 c 库,自然也可以由 cgo 直接调用,前提是指定正确的编译条件,如 Python.h 头文件( ...

  9. pycharm运行Pytest,有没有将Pytest写入Python代码中的区别

    初学pytest. 将pytest写进Python代码中 不同运行方式都可正常运行     =======================**********************========= ...

随机推荐

  1. Solution Set - 《赏竹而格之》

    1.「GXOI / GZOI 2019」「洛谷 P5304」旅行者   Link & Submission.   经典二进制分组,没啥好说的. 2. 「SDOI 2019」「洛谷 P5361」 ...

  2. C#动态规划法计算文本相似度

    C# 采用动态规划算法,计算两个字符串之间的相似程度. public static double CountTextSimilarity(string textX, string textY, boo ...

  3. 我们一起来学Shell - shell的并发及并发控制

    文章目录 bash的并发 未使用并发的脚本 简单修改 使用wait命令 控制并发进程的数量 文件描述符 查看当前进程打开的文件 自定义当前进程用描述符号操作文件 管道 我们一起来学Shell - 初识 ...

  4. CentOS 7 下编译安装 4.14 内核

    文章目录 rpm升级 编译升级 升级前 下载安装包 编译内核 更新启动引导 修改默认启动内核 重启之后验证 rpm升级 # rpm的方式升级内核 1.载入内核公钥 [root@localhost ~] ...

  5. web开发 小方法3-position

    值 描述 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元素的位置通过 "left", "top", " ...

  6. 关于 Xcode 更新 appleID 更换

    可能不少人会遇到 前一位同事走之后,他的 appID帐号下载的东西更新不了 下面给予大家一个解决办法  例如 Xcode  1.打开引用程序目录 2.找到Xcode,右键"显示包内容&quo ...

  7. 【基础篇】js对本地文件增删改查--改

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  8. 微信小程序wifi控制开发

    小程序wifi控制开发方案 ----- 由小程序通过公众号给wifi控制板进行配网,后台服务器自动生成设备名并注册在数据库中,wifi控制板自动保存生成的设备名,小程序可读取WIFI控制板的数据,控制 ...

  9. 攻防世界MISC进阶之签到题

    攻防世界MISC进阶之签到题    第一步:分析    第二步:实操    第三步:答案第一步:分析难度系数:1星题目来源: SSCTF-2017题目描述:SSCTF线上选举美男大赛开始了,泰迪拿着他 ...

  10. 信而泰IPv6协议一致性测试解决方案

    信而泰IPv6协议一致性测试解决方案   背景 中国已经开始逐步进入万物互联的社会,相比原来的手机.电脑等接入网络,万物互联时代接入网络的智能终端会海量增加,而且在万物互联时代,网络的流量巨大,互联的 ...