返回顶部

分享10个超实用的Python编程技巧

[复制链接]
气泡水Lv.2 显示全部楼层 发表于 2022-4-14 15:21:47 |阅读模式 打印 上一主题 下一主题

  今天小编来给大家分享几个Python的编程技巧,帮助你迅速完成地从小白到Python大神的蜕变。

  1、字典翻转

  首先我们来看字典的翻转,假设我们有下面类似的一个字典对象与数据

[Python] 纯文本查看 复制代码
car_dict = { 
    "brand":"Tesla", 
    "model": "Model Y", 
    "year": 2017
}


  倘若我们想要翻转字典当中的键值对,可以这么来做

[Python] 纯文本查看 复制代码
d2 = {}
for k, v in car_dict.items():
    d2[v] = k
print(d2)


  output

[Python] 纯文本查看 复制代码
{'Tesla': 'brand', 'Model Y': 'model', 2017: 'year'}


  结果的键值对就产生了对调,当然我们也还有更加简单的方法,代码如下

[Python] 纯文本查看 复制代码
d3 = dict(map(reversed, car_dict.items()))
print(d3)


  output

[Python] 纯文本查看 复制代码
{'Tesla': 'brand', 'Model Y': 'model', 2017: 'year'}


  2、lambda()和map()

  上面的代码当中用到了map()方法,那小编这里就着重说说,map()方法可以和lambda()方法联用,代码如下

[Python] 纯文本查看 复制代码
li = [5, 10, 22, 30, 50, 65, 70]
final_list = list(map(lambda x: x*2, li))
print(final_list)


  output

[Python] 纯文本查看 复制代码
[10, 20, 44, 60, 100, 130, 140]


  我们先有lambda()方法来定义一个函数,然后通过map()方法映射到列表当中的每一个元素,最后仍然以列表的形式返回,

  3、列表当中的字典排序

  有时候我们也需要根据特定的条件针对列表当中的字典排序,例如

[Python] 纯文本查看 复制代码
dicts_lists = [ 
  { 
    "Name" :  "Tony" , 
    "Age" : 20, 
  }, 
  { 
     "Name" :  "May" , 
     "Age" : 14, 
  }, 
  { 
    "Name" :  "Katy" , 
    "Age" : 23, 
  } 


  我们需要根据字典当中的“Age”字段来进行排序,代码如下

[Python] 纯文本查看 复制代码
dicts_lists.sort(key=lambda x:x.get('Age'))
print(dicts_lists)


  output

[Python] 纯文本查看 复制代码
[{'Name': 'May', 'Age': 14}, {'Name': 'Tony', 'Age': 20}, {'Name': 'Katy', 'Age': 23}]


  上面的结果是按照升序来进行排序的,要是我们需要其以降序的方式来排序,可以这么来做,代码如下

[Python] 纯文本查看 复制代码
dicts_lists.sort(key=lambda x:x.get('Age'), reverse = True)
print(dicts_lists)


  output

[Python] 纯文本查看 复制代码
[{'Name': 'Katy', 'Age': 23}, {'Name': 'Tony', 'Age': 20}, {'Name': 'May', 'Age': 14}]


  4、给列表当中的字符串排序

  要是列表当中的都是字符串,而我们需要对其进行排序,该如何进行呢?例如

[Python] 纯文本查看 复制代码
my_list = ["blue", "red", "green" ]


  我们根据首字母在字母表当中的顺序来排的话,代码如下

[Python] 纯文本查看 复制代码
my_list.sort()
print(my_list)


  output

[Python] 纯文本查看 复制代码
['blue', 'green', 'red']


  要是我们根据其字符串的长度来进行排序的话,可以这么来做,代码如下

[Python] 纯文本查看 复制代码
my_list = sorted(my_list, key=len)
print(my_list)


  output

[Python] 纯文本查看 复制代码
['red', 'blue', 'green']


  5、根据别的列表来进行排序

  有时候我们需要根据其他的列表来对本列表来一个排序,例如有下面这两个列表

[Python] 纯文本查看 复制代码
a = ['blue', 'green', 'orange', 'purple', 'yellow'] 
b = [3, 2, 5, 4, 1]


  我们根据列表“b”来对列表“a”进行排序,具体该怎么操作呢?代码如下

[Python] 纯文本查看 复制代码
sorted_list = [v for _, v in sorted(dict(zip(b, a)).items(), key=lambda x:x[0])]
print(sorted_list)


  output

[Python] 纯文本查看 复制代码
['yellow', 'green', 'blue', 'purple', 'orange']


  6、取出列表当中最大/最小的几个数

  代码如下

[Python] 纯文本查看 复制代码
import heapq

scores = [1, 10, 11, 2, 5, 6]
print(heapq.nlargest(3, scores))  ## 最大的3个数
print(heapq.nsmallest(3, scores))  ## 最小的3个数


  output

[Python] 纯文本查看 复制代码
[11, 10, 6]
[1, 2, 5]


  7、staticmethod()函数

  Python当中的staticmethod()函数可以将一个方法定义成类的静态方法,这样在调用的时候无需实例化,例如

[Python] 纯文本查看 复制代码
class MyClass(object):
    @staticmethod
    def print_name(name):
        print('My name is: ', name)


  不需要实例化就可以使用,例如

[Python] 纯文本查看 复制代码
MyClass.print_name("John")
MyClass.print_name("Mike")


  output

[Python] 纯文本查看 复制代码
My name is:  John
My name is:  Mike


  当然也可以在实例化之后调用方法,例如

[Python] 纯文本查看 复制代码
myclass = MyClass()
myclass.print_name("John")


  output

[Python] 纯文本查看 复制代码
My name is:  John


  8、classmethod函数

  classmethod修饰符对应的函数也不需要被实例化,不需要self参数,取而代之的是cls参数用来调用类的属性、方法以及实例化对象

[Python] 纯文本查看 复制代码
class MyClass(object):
    test1 = 1

    def func1(self):
        print('foo')

    @classmethod
    def func2(cls):
        print('func2')
        print(cls.test1)
        cls().func1() 


  我们不需要实例化对象就可以调用func2()方法,代码如下

[Python] 纯文本查看 复制代码
MyClass.func2()


  output

[Python] 纯文本查看 复制代码
func2
1
foo


 
 【免责声明】本文系转载,原文来源公众号Python爱好者集中营,作者:欣一。转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与联系我们,我们会予以更改或删除相关文章,以保证您的权益!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

达内教育:成立于2002年。致力于面向IT互联网行业,培养软件开发工程师、测试工程师、系统管理员、智能硬件工程师、UI设计师、网络营销、会计等职场人才 达内使命:缔造年轻人的中国梦、缔造达内员工的中国梦 达内愿景:做管理一流的教育公司
  • 商务合作

  • Powered by Discuz! X3.4 | Copyright © 2002-2024, 达内教育 Tedu.cn
  • 京ICP备08000853号-56 |网站地图