0

给定一组原子索引,我正在尝试生成索引坐标(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]

但这似乎不是很 Pythonic。如果不获取列表列表或元组列表,有没有更好的方法?

4

1 回答 1

5

怎么样:

>>> 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循环,如果它们在这种情况下更清楚的话。由于我从未完全理解的原因,有些人觉得当他们水平编写代码而不是垂直编写代码时他们更聪明,即使它更难调试。

于 2013-06-04T17:24:16.183 回答