资讯专栏INFORMATION COLUMN

十三个好用到起飞的Python技巧!

ruicbAndroid / 2340人阅读

摘要:因其在各个领域的实用性与和等其他编程语言相比的生产力以及与英语类似的命令而广受欢迎。反转字典一个非常常见的字典任务是如果我们有一个字典并且想要反转它的键和值。

  Python 因其在各个领域的实用性、与 Java、C 和 C++ 等其他编程语言相比的生产力以及与英语类似的命令而广受欢迎。
        

假如你也是Python学习爱好者,那么今天讲述的13个技巧,真挺香!

列表

与列表相关的6个操作,介绍如下;

1. 将两个列表合并到一个字典中

  假设我们在Python中有两个列表,我们希望将它们合并为字典形式,其中一个列表的项目作为字典的键,另一个作为值。这是在用 Python 编写代码时经常遇到的一个非常常见的问题。

  但是为了解决这个问题,我们需要考虑几个限制,比如两个列表的大小,两个列表中项目的类型,以及其中是否有重复的项目,尤其是我们将使用的项目 作为钥匙。我们可以通过使用像 zip 这样的内置函数来克服这个问题。

keys_list = ["A", "B", "C"] values_list = ["blue", "red", "bold"]  # 有 3 种方法可以将这两个列表转换为字典 # 1.使用Python zip、dict函数 dict_method_1 = dict(zip(keys_list, values_list))  # 2. 使用带有字典推导式的 zip 函数 dict_method_2 = {key:value for key, value in zip(keys_list, values_list)}  # 3.循环使用zip函数 items_tuples = zip(keys_list, values_list)  dict_method_3 = {}  for key, value in items_tuples:      if key in dict_method_3:          pass      else:          dict_method_3[key] = value          print(dict_method_1) print(dict_method_2) print(dict_method_3) 

结果如下:                

2.将两个或多个列表合并为一个列表

  当我们有两个或更多列表时,我们希望将它们全部收集到一个大列表中,其中较小列表的所有第一项构成较大列表中的第一个列表。

  例如,如果我有 4 个列表 [1,2,3]、[‘a’,‘b’,‘c’]、[‘h’,‘e’,‘y’], 和[4,5,6],我们想为这四个列表创建一个新列表;它将是 [[1,‘a’,‘h’,4], [2,‘b’,‘e’,5], [3,‘c’,‘y’,6]] 。

def merge(*args, missing_val = None):     max_length = max([len(lst) for lst in args])     outList = []     for i in range(max_length):         outList.append([args[k][i] if i < len(args[k]) else missing_val for k in range(len(args))])     return outList  merge([1,2,3],["a","b","c"],["h","e","y"],[4,5,6]) 

结果如下:        

3. 对字典列表进行排序

  下一组日常列表任务是排序任务。根据列表中包含的项目的数据类型,我们将采用稍微不同的方式对它们进行排序。让我们首先从对字典列表进行排序开始。

dicts_lists = [   {     "Name": "James",     "Age": 20,   },   {      "Name": "May",      "Age": 14,   },   {     "Name": "Katy",     "Age": 23,   } ]  # 方法一 dicts_lists.sort(key=lambda item: item.get("Age"))  # 方法二 from operator import itemgetter f = itemgetter("Name") dicts_lists.sort(key=f) 

结果如下:        

4. 对字符串列表进行排序

  我们经常面临包含字符串的列表,我们需要按字母顺序、长度或我们想要或我们的应用程序需要的任何其他因素对这些列表进行排序。现在,我应该提到这些是对字符串列表进行排序的直接方法,但有时您可能需要实现排序算法来解决该问题。

my_list = ["blue", "red", "green"]  # 方法一 my_list.sort()  my_list = sorted(my_list, key=len)   # 方法二 import locale from functools import cmp_to_key my_list = sorted(my_list, key=cmp_to_key(locale.strcoll))  

结果如下:
                        

5. 根据另一个列表对列表进行排序

  有时,我们可能想要/需要使用一个列表来对另一个列表进行排序。因此,我们将有一个数字列表(索引)和一个我想使用这些索引进行排序的列表。

a = ["blue", "green", "orange", "purple", "yellow"] b = [3, 2, 5, 4, 1]  sortedList =  [val for (_, val) in sorted(zip(b, a), key=lambda x: x[0])] print(sortedList) 

结果如下:        

6. 将列表映射到字典

  如果给定一个列表并将其映射到字典中。也就是说,我想将我的列表转换为带有数字键的字典,应该怎么做呢?

mylist = ["blue", "orange", "green"] #Map the list into a dict using the map, zip and dict functions mapped_dict = dict(zip(itr, map(fn, itr))) 

字典

与字典相关的2个操作,介绍如下;

7. 合并两个或多个字典

假设我们有两个或多个字典,并且我们希望将它们全部合并为一个具有唯一键的字典。

from collections import defaultdict  def merge_dicts(*dicts):     mdict = defaultdict(list)     for dict in dicts:     for key in dict:         res[key].append(d[key])     return dict(mdict) 

8. 反转字典

  一个非常常见的字典任务是如果我们有一个字典并且想要反转它的键和值。因此,键将成为值,而值将成为键。当我们这样做时,我们需要确保我没有重复的键,值可以重复,但键不能,并确保所有新键都是可散列的。

my_dict = {   "brand": "Ford",   "model": "Mustang",   "year": 1964 } # 方法一 my_inverted_dict_1 = dict(map(reversed, my_dict.items()))  # 方法二 from collections import defaultdict my_inverted_dict_2 = defaultdict(list) {my_inverted_dict_2[v].append(k) for k, v in my_dict.items()}  print(my_inverted_dict_1) print(my_inverted_dict_2) 

结果如下:    

字符串

与字符串相关的3个操作,介绍如下;

9. 使用 f 字符串格式化字符串

  可能是您几乎每天都需要完成的第一项任务。在 Python 中有多种方法可以格式化字符串;我最喜欢的是使用 f 字符串。

str_val = "books" num_val = 15 print(f"{num_val} {str_val}")  print(f"{num_val % 2 = }")  print(f"{str_val!r}")   price_val = 5.18362 print(f"{price_val:.2f}")   from datetime import datetime; date_val = datetime.utcnow() print(f"{date_val=:%Y-%m-%d}")  

结果如下:          

10. 检查子串

我之前需要多次执行的一项非常常见的任务是,检查字符串是否在字符串列表中。

addresses = ["123 Elm Street", "531 Oak Street", "678 Maple Street"] street = "Elm Street"  # 方法一 for address in addresses:     if address.find(street) >= 0:         print(address)          # 方法二 for address in addresses:     if street in address:         print(address) 

结果如下:    

11. 以字节为单位获取字符串的大小

  有时,尤其是在构建内存关键应用程序时,我们需要知道我们的字符串使用了多少内存。幸运的是,这可以通过一行代码快速完成。

str1 = "hello" str2 = ""  def str_size(s):     return len(s.encode("utf-8"))  print(str_size(str1)) print(str_size(str2)) 

结果如下:        

输入/输出操作

与输入/输出操作相关的2个操作,介绍如下;

12. 检查文件是否存在

  在数据科学和许多其他应用程序中,我们经常需要从文件中读取数据或向其中写入数据。但要做到这一点,我们需要检查文件是否存在。因此,我们的代码不会因错误而终止。

# 方法一 import os  exists = os.path.isfile("/path/to/file")  # 方法二 from pathlib import Path config = Path("/path/to/file")  if config.is_file():      pass 

13.解析电子表格

  另一种非常常见的文件交互是从电子表格中解析数据。幸运的是,我们有 CSV 模块来帮助我们有效地执行该任务。

import csv csv_mapping_list = [] with open("/path/to/data.csv") as my_data:     csv_reader = csv.reader(my_data, delimiter=",")     line_count = 0     for line in csv_reader:         if line_count == 0:             header = line         else:             row_dict = {key: value for key, value in zip(header, line)}             csv_mapping_list.append(row_dict)         line_count += 1 


   如果对软件测试、接口测试、自动化测试、持续集成、面试经验。感兴趣可以进到806549072,群内会有不定期的分享测试资料。还会有技术大牛,业内同行一起交流技术

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/122024.html

相关文章

  • 针对Python初学者,这13个好用起飞技巧

    摘要:如果你也是学习爱好者,今天讲述的个小技巧,真挺香欢迎收藏学习,喜欢点赞支持。因此,键将成为值,而值将成为键。幸运的是,这可以通过一行代码快速完成。因此,我们的代码不会因错误而终止。 ...

    张宪坤 评论0 收藏0
  • 让facebook自愈:自动化主动机架维护 - 1

    摘要:一个在内存中保存静态索引的缓存机器可以接受从负载均衡池中摘除时长时间的网络中断。处理一次重启需要主动替换一个没有被同一次维护影响的服务器。主机可以被从负载均衡池中移除,数据可以存储在磁盘上,服务器也可以在重启后快速追平复制进度。 Making Facebook self-healing: Automating proactive rack maintenance 原文:https://...

    wangbjun 评论0 收藏0
  • 一个脚本教你快速去除桌面图标烦人小箭头

    摘要:于是乎,冰河写了一个脚本完美去除了桌面图标烦人的小箭头。今天,给大家分享一个如何完美去除桌面快捷图标小箭头的技巧,希望能够给大家带来帮助。这种方法不会导致任何问题可放心使用,冰河已经亲自测试过了。 ...

    Jaden 评论0 收藏0
  • 小李飞刀:飞呀飞呀python骄傲放纵

    摘要:虽然还在一个城市里,但是感觉有了更多的自己的时间。但是有土办法也有聪明的办法。所以更高级的抽象化是需要逐步适应的。最近已经开始刷啦,受小伙伴感染,后续也会开始写习题本啦 小小唠叨几句 这几天都没有更新,不代表我没有学习吖!这两天都在忙着半夜,终于有了自己的小窝,一直住家里,突然搬出来心情还满奇特的。虽然还在一个城市里,但是感觉有了更多的自己的时间。比如现在是晚上十点,在家的话可能还有很...

    Jacendfeng 评论0 收藏0
  • 让敲过每行代码产生价值

    摘要:采用快速掌握核心知识解决实际问题中补充的方式。让每一行代码都能给自己带来价值,才是每个码农应该有的思维,而不是成为一个职业码农。不过做个人博客有一个重要的价值便是在你做成之后可以部署上线让它成为自己在互联网的基地。 勤学似春起之苗,不见其增,而日有所长 如果你一直想学python,但是不知道从何入手,那么就不要犹豫了。这篇文章就是我的python新实战计划可能适合你。 学习 Pytho...

    OnlyMyRailgun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<