python - 生成此类列表的 pythonic 方式是什么? (n 维立方体的面)

标签 python list geometry tuples

if n == 1: return [(-1,),    (1,)]
if n == 2: return [(-1,0),   (1,0),   (0,-1),   (0,1)]
if n == 3: return [(-1,0,0), (1,0,0), (0,-1,0), (0,1,0), (0,0,-1), (0,0,1)]

基本上,返回符合上述规范的 2n 元组列表。上面的代码可以很好地满足我的目的,但我希望看到一个适用于所有 n ∈ ℕ 的函数(只是为了启发)。我可以接受在答案中包含 tuple([0]*n)

我正在使用它为测量多面体生成面的方向。对于所有方向,我都可以使用 list(itertools.product(*[(0, -1, 1)]*n)),但我无法想出非常简洁的东西面方向。

最佳答案

def faces(n):
    def iter_faces():
        f = [0] * n
        for i in range(n):
            for x in (-1, 1):
                f[i] = x
                yield tuple(f)
            f[i] = 0
    return list(iter_faces())

>>> faces(1)
[(-1,), (1,)]
>>> faces(2)
[(-1, 0), (1, 0), (0, -1), (0, 1)]
>>> faces(3)
[(-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)]

关于python - 生成此类列表的 pythonic 方式是什么? (n 维立方体的面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18107608/

相关文章:

java - Geotools com.vividsolutions.jts.geom.TopologyException : side location conflict

python - 使用 **kwargs 初始化类是否存在安全问题?

python - TensorFlow 问题 google colab ; tensorflow._api.v1.compat.v 2' has no attribute ' __internal__

python - OpenAI GPT-3 API 错误 : "InvalidRequestError: Unrecognized request argument supplied"

java - Foreach in foreach 从列表中删除项目

java - 如何在Java中获取圆中相交部分的大小

css - 如何在容器元素外渲染三 Angular 形?

python - 单元测试中奇怪的对象实例行为

python 自定义排序列表 1/2/3/../9/10

r - 在列表中排序数据框