Python For循环用于填充多维数据集数组中的节点位置

Python For循环用于填充多维数据集数组中的节点位置,python,arrays,for-loop,Python,Arrays,For Loop,所以我开始制作4D立方体(tesseract),但后来有点困惑,所以我把它放到了一个维度上 我试图找到一种方法,迭代地遍历我命名为“pos”的列表(基本上是一个1和0的列表,表示节点的位置)并填充相关值 e、 g。 原点为[0,0,0],而“pqr”为[1,1,1] 我想做一个一般的尺寸,我想我找到了正确的方法开始它。它首先按长度,然后按词汇顺序对节点进行排序。之后,它会检查节点的长度,如果节点的维度正确,则可以在“pos”列表中迭代,将1添加到相应的字段中。它向前看,如果下一个节点是一个更高的

所以我开始制作4D立方体(tesseract),但后来有点困惑,所以我把它放到了一个维度上

我试图找到一种方法,迭代地遍历我命名为“pos”的列表(基本上是一个1和0的列表,表示节点的位置)并填充相关值

e、 g。 原点为[0,0,0],而“pqr”为[1,1,1]

我想做一个一般的尺寸,我想我找到了正确的方法开始它。它首先按长度,然后按词汇顺序对节点进行排序。之后,它会检查节点的长度,如果节点的维度正确,则可以在“pos”列表中迭代,将1添加到相应的字段中。它向前看,如果下一个节点是一个更高的维度,那么它会改变添加到下一维度的方式。这就是我需要帮助的地方

我如何遍历此列表,在适当的维度上添加1,为我的多维数据集创建一个脚手架?

输入 D_节点位置项()的所需输出值 使用itertools:

from itertools import imap, groupby, chain, permutations
from operator import itemgetter
list(imap(itemgetter(0), groupby(chain.from_iterable(permutations('0'*(3-i) + '1'*i) for i in range(4)))))
# [('0', '0', '0'), ('0', '0', '1'), ('0', '1', '0'), ('0', '0', '1'), ('0', '1', '0'), ('1', '0', '0'), ('0', '1', '1'), ('1', '0', '1'), ('1', '1', '0'), ('1', '0', '1'), ('1', '1', '0'), ('1', '1', '1')]

如果只需要顶点列表,可以轻松执行以下操作:

>>> map(list, product([0, 1], repeat=dimension))

否则,如果您还需要标签组合,可以尝试以下操作:

from itertools import product

axis_labels = ['p','q','r']    
dimension = len(axis_labels)

for comb in product([0, 1], repeat=dimension):
    label = ''.join([axis_labels[i] for i in range(dimension) if comb[i]])
    if not label: label = '0'
    print label, list(comb)
屈服

0 [0, 0, 0]
r [0, 0, 1]
q [0, 1, 0]
qr [0, 1, 1]
p [1, 0, 0]
pr [1, 0, 1]
pq [1, 1, 0]
pqr [1, 1, 1]
如果您关心订单,您可以随时存储标签/梳子,并按标签长度进行排序。

可能的重复项
>>> sorted(map(list, product([0, 1], repeat=dimension)), key=sum)
[[0, 0, 0],
 [0, 0, 1],
 [0, 1, 0],
 [1, 0, 0],
 [0, 1, 1],
 [1, 0, 1],
 [1, 1, 0],
 [1, 1, 1]]
from itertools import product

axis_labels = ['p','q','r']    
dimension = len(axis_labels)

for comb in product([0, 1], repeat=dimension):
    label = ''.join([axis_labels[i] for i in range(dimension) if comb[i]])
    if not label: label = '0'
    print label, list(comb)
0 [0, 0, 0]
r [0, 0, 1]
q [0, 1, 0]
qr [0, 1, 1]
p [1, 0, 0]
pr [1, 0, 1]
pq [1, 1, 0]
pqr [1, 1, 1]