Python 是当今广泛使用的编程语言之一, 在数据科学, 科学计算, web 开发, 游戏开发和构建桌面图形界面等各个领域都有应用. Python 因其在各个领域的实用性, 与 Java,C 和 C++ 等其他编程语言相比的生产力以及与英语类似的命令而广受欢迎.
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
来源: http://developer.51cto.com/art/202110/684631.htm