如何使用显式for循环实现等价于列表推导式的嵌套列表生成
问题:用显式for循环实现嵌套列表的索引提取
现有两个列表:
values = [['bert', '1234', 'xxx', 50], ['ernie', '5678', 'fff', 100]] required = [1, 3]
需要从values的每个子列表中提取required指定的索引(1和3)对应的元素,生成形如[['1234', 50], ['5678', 100]]的嵌套列表。
已经通过列表推导式解决该问题:
[[x[y] for y in required] for x in values]
但如何用显式的for循环写出等价代码?
尝试了以下代码,但得到扁平列表['1234', 50, '5678', 100],不符合需求:
new_list = [] for x in values: for y in required: new_list.append(x[y])
解决方案
你之前的代码直接把元素追加到外层列表,没有为每个子列表单独构建内层容器。正确的做法是遍历每个子列表时,先创建一个临时内层列表,把提取到的元素加入其中,再将这个内层列表整体追加到外层列表:
new_list = [] for x in values: inner_list = [] # 为当前子列表创建临时存储容器 for y in required: inner_list.append(x[y]) new_list.append(inner_list) # 将内层列表加入最终结果
运行这段代码后,new_list的结果就是[['1234', 50], ['5678', 100]],和列表推导式的输出完全一致。
内容的提问来源于stack exchange,提问作者Graeme Thom
相关产品推荐
相关产品推荐

