面试题答案
一键面试1. 常规遍历方法
data = [{'name': 'Alice', 'age': 25,'score': 85}, {'name': 'Bob', 'age': 30,'score': 78}]
result = []
for item in data:
if item['age'] > 40 and item['score'] > 90:
result.append(item)
2. 优化内存使用 - 生成器表达式
使用生成器表达式可以避免一次性将所有符合条件的字典存储在内存中,而是按需生成。
data = [{'name': 'Alice', 'age': 25,'score': 85}, {'name': 'Bob', 'age': 30,'score': 78}]
generator_result = (item for item in data if item['age'] > 40 and item['score'] > 90)
# 如果确实需要列表形式,再进行转换
result_list = list(generator_result)
3. 并行处理 - multiprocessing
模块
利用multiprocessing
模块将数据分块处理,然后合并结果。
import multiprocessing
def filter_data_chunk(chunk):
return [item for item in chunk if item['age'] > 40 and item['score'] > 90]
if __name__ == '__main__':
data = [{'name': 'Alice', 'age': 25,'score': 85}, {'name': 'Bob', 'age': 30,'score': 78}]
num_processes = multiprocessing.cpu_count()
chunk_size = len(data) // num_processes
chunks = [data[i:i + chunk_size] for i in range(0, len(data), chunk_size)]
pool = multiprocessing.Pool(processes=num_processes)
results = pool.map(filter_data_chunk, chunks)
pool.close()
pool.join()
final_result = [item for sublist in results for item in sublist]
4. 其他优化
- 使用
numba
库:如果数据结构和处理逻辑允许,可以使用numba
对Python函数进行JIT编译,提升处理速度。但numba
对字典操作的支持有限,可能需要对数据结构进行一定的转换。 - 使用
pandas
库:如果数据可以整理成表格形式,pandas
提供了高效的矢量化操作,可以快速处理大规模数据。例如:
import pandas as pd
data = [{'name': 'Alice', 'age': 25,'score': 85}, {'name': 'Bob', 'age': 30,'score': 78}]
df = pd.DataFrame(data)
result = df[(df['age'] > 40) & (df['score'] > 90)].to_dict('records')