如何将含多print的Python循环转换为推导式并输出10条独立结果?
将Python循环改写为推导式实现多print输出
原始需求代码
需要改写的for循环:
for i in range(1, 11): result = len({tuple(walk) for (walk, distance) in dic[i] if distance == 0}) print(f'There are {result} different unique walks with length {i}')
用户尝试的问题
你尝试的推导式写法会把所有walk合并成一个集合输出,没法得到10条独立的打印语句:
print({tuple(walk) for i in range(1, 11) for (walk, distance) in dic[i] if distance == 0})
可行的改写方式
想实现10条独立的print语句,不能直接用集合推导式套print(毕竟print是无返回值的函数)。不过可以用列表推导式触发多次print调用——虽然这种写法的可读性不如原始循环,但确实能满足需求:
[print(f'There are {len({tuple(walk) for (walk, distance) in dic[i] if distance == 0})} different unique walks with length {i}') for i in range(1, 11)]
如果想让代码稍微清晰点,可以把计算唯一walk集合的逻辑单独拎出来:
[print(f'There are {len(unique_walks)} different unique walks with length {i}') for i in range(1, 11) for unique_walks in [{tuple(walk) for (walk, distance) in dic[i] if distance == 0}]]
注意事项
用列表推导式执行print这种“副作用”操作,在Python社区其实并不推荐——列表推导式本来是用来生成数据的,不是用来执行动作的。如果追求代码的可读性和维护性,原始的for循环其实是更好的选择。
内容的提问来源于stack exchange,提问作者DaSomes
相关产品推荐
相关产品推荐

