面试题答案
一键面试data = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
new_list = [a for a, _, _ in data]
性能影响分析
- 常规方式:通过上述的列表推导式方式,Python解释器会迭代
data
列表,对每个元组进行多变量解构赋值,每次迭代只提取第一个元素,这种方式简洁高效。因为列表推导式在底层是通过C实现的迭代器协议,执行速度较快。 - 使用
map
函数:
def extract_first(tup):
a, _, _ = tup
return a
new_list_map = list(map(extract_first, data))
map
函数也是基于迭代器的,它将extract_first
函数应用到data
的每个元素上。但这里定义了一个额外的函数extract_first
,相比列表推导式,多了函数调用的开销,所以在性能上略逊于列表推导式。
3. 使用for
循环:
new_list_loop = []
for tup in data:
a, _, _ = tup
new_list_loop.append(a)
这种传统的for
循环方式,可读性较好,但由于每次循环都有显式的变量赋值和append
操作,相比列表推导式和map
函数,性能较差。列表推导式和map
函数利用了底层优化的迭代器机制,而for
循环每次迭代都有更多的Python字节码指令开销。