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/