作者:Huiying_Liu | 来源:互联网 | 2024-11-30 15:35
本文介绍了Python中*args和**kwargs的使用方法,以及如何通过lambda表达式、map和filter函数处理数据。同时,探讨了enumerate和zip函数的应用,并展示了如何使用生成器函数处理大数据集。
*args 和 **kwargs
*args 用于传递任意数量的位置参数,这些参数将被收集到一个元组中。而 **kwargs 则用于传递关键字参数,这些参数会被收集到一个字典中。
def func(*args, **kwargs):
print('位置参数:', args)
for key, value in kwargs.items():
print(f'{key}: {value}')
lambda 表达式
lambda 表达式是一种简洁的方式定义单行函数。例如,可以使用 lambda 表达式快速创建一个匿名函数。
map 和 filter 函数
map 函数接受一个函数和一个序列作为参数,返回一个新的序列,该序列中的每个元素都是原序列中的元素经过给定函数处理后的结果。filter 函数则用于过滤序列,返回满足条件的元素。
# 使用 map 函数
result = list(map(lambda x: x % 2, range(10)))
print(result) # 输出: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
# 使用 filter 函数
filtered_result = list(filter(lambda x: x % 2, range(10)))
print(filtered_result) # 输出: [1, 3, 5, 7, 9]
iter 和 next 函数
iter 函数用于创建迭代器,而 next 函数用于从迭代器中获取下一个值。
# 创建一个列表
flash = ['jay garrick', 'barry allen', 'wally west', 'bart allen']
# 创建一个迭代器
superhero = iter(flash)
# 打印每个元素
print(next(superhero)) # 输出: jay garrick
print(next(superhero)) # 输出: barry allen
print(next(superhero)) # 输出: wally west
print(next(superhero)) # 输出: bart allen
enumerate 函数
enumerate 函数用于将一个可迭代对象(如列表)转换为索引-值对的枚举对象。
a = ['a', 'b', 'c', 'dd']
enu_a = enumerate(a)
print(type(enu_a)) # 输出:
list_enu_a = list(enu_a)
print(list_enu_a) # 输出: [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'dd')]
# 从索引 100 开始
print(list(enumerate(a, start=100))) # 输出: [(100, 'a'), (101, 'b'), (102, 'c'), (103, 'dd')]
zip 函数
zip 函数用于将多个可迭代对象中的元素配对,返回一个元组的列表。
a = ['a', 'b', 'c', 'dd']
b = ['q', 'w', 'e', 'rr']
c = ['a', 's', 'd', 'ff']
# 使用 zip 函数
print(list(zip(a, b, c))) # 输出: [('a', 'q', 'a'), ('b', 'w', 's'), ('c', 'e', 'd'), ('dd', 'rr', 'ff')]
处理大数据集
当处理大量数据时,可以使用 chunksize 参数分块读取文件,避免内存不足的问题。
import pandas as pd
# 初始化一个空字典
counts_dict = {}
# 分块读取文件
for chunk in pd.read_csv('tweets.csv', chunksize=10):
# 遍历 DataFrame 中的列
for entry in chunk['lang']:
if entry in counts_dict.keys():
counts_dict[entry] += 1
else:
counts_dict[entry] = 1
# 打印结果
print(counts_dict)
生成器函数
生成器函数通过 yield 关键字逐个生成值,适用于处理大数据集,避免一次性加载所有数据导致内存不足。
# 创建一个字符串列表
lannister = ['cersei', 'jaime', 'tywin', 'tyrion', 'joffrey']
# 创建一个生成器对象
lengths = (len(person) for person in lannister)
# 打印生成器中的值
for value in lengths:
print(value)
# 定义生成器函数
def get_lengths(input_list):
"""生成器函数,返回输入列表中每个字符串的长度。"""
for person in input_list:
yield len(person)
# 打印生成器函数的结果
for value in get_lengths(lannister):
print(value)