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

时间:2022-09-27 20:47:07

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

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

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

列表

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

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

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

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

  1. keys_list=['A','B','C']
  2. values_list=['blue','red','bold']
  3. #有3种方法可以将这两个列表转换为字典
  4. #1.使用Pythonzip、dict函数
  5. dict_method_1=dict(zip(keys_list,values_list))
  6. #2.使用带有字典推导式的zip函数
  7. dict_method_2={key:valueforkey,valueinzip(keys_list,values_list)}
  8. #3.循环使用zip函数
  9. items_tuples=zip(keys_list,values_list)
  10. dict_method_3={}
  11. forkey,valueinitems_tuples:
  12. ifkeyindict_method_3:
  13. pass
  14. else:
  15. dict_method_3[key]=value
  16. print(dict_method_1)
  17. print(dict_method_2)
  18. print(dict_method_3)

结果如下:

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

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]] 。

  1. defmerge(*args,missing_val=None):
  2. max_length=max([len(lst)forlstinargs])
  3. outList=[]
  4. foriinrange(max_length):
  5. outList.append([args[k][i]ifielsemissing_valforkinrange(len(args))])
  6. returnoutList
  7. merge([1,2,3],['a','b','c'],['h','e','y'],[4,5,6])

结果如下:

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

3. 对字典列表进行排序

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

  1. dicts_lists=[
  2. {
  3. "Name":"James",
  4. "Age":20,
  5. },
  6. {
  7. "Name":"May",
  8. "Age":14,
  9. },
  10. {
  11. "Name":"Katy",
  12. "Age":23,
  13. }
  14. ]
  15. #方法一
  16. dicts_lists.sort(key=lambdaitem:item.get("Age"))
  17. #方法二
  18. fromoperatorimportitemgetter
  19. f=itemgetter('Name')
  20. dicts_lists.sort(key=f)

结果如下:

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

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

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

  1. my_list=["blue","red","green"]
  2. #方法一
  3. my_list.sort()
  4. my_list=sorted(my_list,key=len)
  5. #方法二
  6. importlocale
  7. fromfunctoolsimportcmp_to_key
  8. my_list=sorted(my_list,key=cmp_to_key(locale.strcoll))

结果如下:

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

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

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

  1. a=['blue','green','orange','purple','yellow']
  2. b=[3,2,5,4,1]
  3. sortedList=[valfor(_,val)insorted(zip(b,a),key=lambdax:x[0])]
  4. print(sortedList)

结果如下:

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

6. 将列表映射到字典

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

  1. mylist=['blue','orange','green']
  2. #Mapthelistintoadictusingthemap,zipanddictfunctions
  3. mapped_dict=dict(zip(itr,map(fn,itr)))

字典

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

7. 合并两个或多个字典

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

  1. fromcollectionsimportdefaultdict
  2. defmerge_dicts(*dicts):
  3. mdict=defaultdict(list)
  4. fordictindicts:
  5. forkeyindict:
  6. res[key].append(d[key])
  7. returndict(mdict)

8. 反转字典

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

  1. my_dict={
  2. "brand":"Ford",
  3. "model":"Mustang",
  4. "year":1964
  5. }
  6. #方法一
  7. my_inverted_dict_1=dict(map(reversed,my_dict.items()))
  8. #方法二
  9. fromcollectionsimportdefaultdict
  10. my_inverted_dict_2=defaultdict(list)
  11. {my_inverted_dict_2[v].append(k)fork,vinmy_dict.items()}
  12. print(my_inverted_dict_1)
  13. print(my_inverted_dict_2)

结果如下:

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

字符串

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

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

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

  1. str_val='books'
  2. num_val=15
  3. print(f'{num_val}{str_val}')
  4. print(f'{num_val%2=}')
  5. print(f'{str_val!r}')
  6. price_val=5.18362
  7. print(f'{price_val:.2f}')
  8. fromdatetimeimportdatetime;
  9. date_val=datetime.utcnow()
  10. print(f'{date_val=:%Y-%m-%d}')

结果如下:

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

10. 检查子串

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

  1. addresses=["123ElmStreet","531OakStreet","678MapleStreet"]
  2. street="ElmStreet"
  3. #方法一
  4. foraddressinaddresses:
  5. ifaddress.find(street)>=0:
  6. print(address)
  7. #方法二
  8. foraddressinaddresses:
  9. ifstreetinaddress:
  10. print(address)

结果如下:

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

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

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

  1. str1="hello"
  2. str2="