AI智能
改变未来

我写的 Python 代码,同事都说好

原文链接: 我写的 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)# output0 python1 go2 java

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

使用

max()

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

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

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

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

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

前面的代码给出了出现最频繁的值。如果想要知道列表中所有元素的出现次数,那么可以使用 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.pydef 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 = 100d = dict.fromkeys(keys, value)# 4、key 来自一个列表,而 value 也是一个列表,使用 zipkeys = [\'a\', \'b\', \'c\']values = [1, 2, 3]d = dict(zip(keys, values))

字典合并

m = {\'a\': 1}n = {\'b\': 2, \'c\': 3}# 合并,两种方式# 1、使用 updatem.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 不存在会报错,推荐使用 geta = d[\'a\']# 2、使用 get,如果 key 不存在还可以赋默认值a = d.get(\'a\')c = d.get(\'c\', 3)

字典遍历

d = {\'a\': 1, \'b\': 2, \'c\': 3}# 遍历 keyfor key in d.keys():pass# 遍历 valuefor value in d.values():pass# 遍历 key 和 valuefor key, value in d.items():pass

字典推导式

列表推导式和字典推导式是我相当喜欢的功能,简洁高效。

map

filter

我都已经快不会用了。

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)

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

推荐阅读:

  • Go 学习路线(2022)
  • Python 学习路线(2022)
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 我写的 Python 代码,同事都说好