如何将给定嵌套list comprehension改写为普通嵌套循环以理解运行逻辑
列表推导式逻辑说明与嵌套循环改写
你给出的列表推导式:
return [x for g in alist for x, R in aux(g) for I in R]
遵循从左到右的for子句对应从外到内的嵌套循环的规则,等价的嵌套循环代码如下:
# 初始化空列表存储结果 result = [] # 第一层循环:遍历alist的每一个元素g for g in alist: # 第二层循环:调用aux(g)得到可迭代对象,遍历其每个元素并解包为x、R for x, R in aux(g): # 第三层循环:遍历R中的每一个元素I for I in R: # 每次最内层循环执行时,将x追加到结果列表 result.append(x) return result
执行流程说明
- 首先遍历输入列表
alist,逐个取出元素g - 对每个
g调用aux函数,拿到该函数返回的可迭代对象,遍历这个可迭代对象,把每个元素解包为x和R两个变量 - 遍历
R中的每一个元素I,这里I本身不会被用到,仅用于控制循环次数:R有多少个元素,当前的x就会被重复添加到结果列表多少次 - 所有循环执行完成后,返回最终的结果列表
内容的提问来源于stack exchange,提问作者shah faisal khan
相关产品推荐
相关产品推荐

