繁体   English   中英

使用列表推导或map()从现有列表创建更大的列表

[英]Create larger list from an existing list using a list comprehension or map()

给定一组原子索引,我试图生成一个索引坐标(x,y和z)的列表。 我的问题很简单,就是如何优雅地从此列表中删除:

atom_indices = [0, 4, 5, 8]

到此列表:

coord_indices = [0, 1, 2, 12, 13, 14, 15, 16, 17, 24, 25, 26]

到目前为止,我想到的最容易阅读/理解的方法是:

coord_indices = []
for atom in atom_indices:
    coord_indices += [3 * atom,
                      3 * atom + 1,
                      3 * atom + 2]

但这似乎不是Python风格的。 如果没有列表列表或元组列表,有没有我想到的更好的方法?

怎么样:

>>> atom_indices = [0, 4, 5, 8]
>>> coords = [3*a+k for a in atom_indices for k in range(3)]
>>> coords
[0, 1, 2, 12, 13, 14, 15, 16, 17, 24, 25, 26]

我们可以按照编写循环的顺序将循环嵌套在列表推导中,即基本上

coords = []
for a in atom_indices: 
    for k in range(3): 
        coords.append(3*a+k)

但是,如果情况更清晰,也不要害怕for循环。 由于我从未完全理解的原因,有些人觉得水平编写代码而不是垂直编写代码变得更加聪明,即使这样会使调试变得更加困难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM