3D惰性迭代器模型维度0与2的惰性转置优雅实现方案探讨
三层可迭代对象的维度转置问题
假设有一个三层可迭代对象 it_it_it(即3D数组的惰性表示),目前已有两种惰性转置的实现方式:
- 转置维度0和1:直接使用
zip(*it_it_it)即可实现惰性转置 - 转置维度1和2:通过
map(lambda it_it: zip(*it_it), it_it_it)实现惰性转置
但转置维度0和2的操作要棘手得多:看起来必须先完全计算外层两个迭代器才能输出结果,而且输出的外层结构不能是惰性的Iterable[Iterable],必须是List[List],仅最内层迭代器可以保持惰性——也就是最优的结果类型是Iterable[List[List]]。
我已经实现了一种解法,但希望找到更优雅的实现方案。
静态类型语言视角的延伸思考
我关注这个问题是为了理解Rust、C++这类静态类型迭代器的相关处理逻辑:
- 是否需要提前规划数据结构来避免这类转置操作?
- 还是直接将迭代器完全计算为
List[List[List]]后,再按照C风格的方式进行转置?
内容的提问来源于stack exchange,提问作者Tom Huntington
相关产品推荐
相关产品推荐

