X
,Y
和Z
是长方体的三个坐标。
现在X = 1,Y = 1,Z = 1且N = 2.
我必须在3D网格上生成所有可能坐标的列表,其中Xi + Yi + Zi的总和不等于N.如果X = 2,则Xi的可能值可以是0,1和2。这同样适用于Y和Z.
到目前为止,我已经编写了以下代码,并将输出显示为:
[[0, 0, 0]]
然而预期的输出是
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
以下是我的代码,我的代码出了什么问题?
[[x,y,z] for x in range(X) for y in range(Y) for z in range(Z) if x+y+z != N]
答案 0 :(得分:8)
range
实际上是一个半封闭的功能。因此,结束值不会包含在结果范围内。
如果X = 2,则Xi的可能值可以是0,1和2
在您的代码中,如果range(X)
为2,0
将只提供1
和X
。您应该使用range(X + 1)
。
>>> X, Y, Z, N = 1, 1, 1, 2
>>> [[x,y,z] for x in range(X + 1) for y in range(Y + 1) for z in range(Z + 1) if x+y+z != N]
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
您可以使用itertools.product
编写相同内容,就像这样
>>> X, Y, Z, N = 1, 1, 1, 2
>>> from itertools import product
>>> [list(i) for i in product(range(X + 1), range(Y + 1), range(Z + 1)) if sum(i) != N]
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
答案 1 :(得分:1)
itertools.product
和list comprehension
的另一个问题:
In [91]: [list(l) for l in it.product([0,1], repeat=3) if sum(l) != 2]
Out[91]: [[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
答案 2 :(得分:0)
试试这个:
x = int(input())
y = int(input())
z = int(input())
n = int(input())
ans=[[i,j,k] for i in range(x+1) for j in range(y+1) for k in range(z+1) if i+j+k !=n]
print(ans)
因为范围函数不包括结束值并且停在第(n-1)个位置所以如果我们在这里使用范围(X)它将仅得到0因此应该使用+1来打印列表词典增加顺序。
答案 3 :(得分:0)
x = int(input())
y = int(input())
z = int(input())
n = int(input())
result = []
for i in range(x+1):
for j in range(y+1):
for k in range(z+1):
if((x+y+z) != 1):
arr = [i,j,k]
result.append(arr)
print(result)
答案 4 :(得分:0)
我们必须使用列表推导,并要注意,因为范围函数终止于第x个值,所以我应该在0到x + 1的范围内,这也适用于j和k。预期的输出应为[i,j,k]格式。
enter code here
x = int(input())
y = int(input())
z = int(input())
n = int(input())
i=0
#print(i)
j=0
#print(j)
k=0
#print(k)
sum=x+y+z
output=[]
output=[[i,j,k]
for i in range(0,x+1)
for j in range(0,y+1)
for k in range(0,z+1) if i+j+k != n]
print(output)
答案 5 :(得分:0)
x = 1
y = 1
z = 2
n = 3
arr_3_D = []
for i in range(x+1):
for j in range(y+1):
for k in range(z+1):
if i+j+k != n:
arr = [i,j,k]
arr_3_D.append(arr)
print(arr_3_D)
输出:[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], [1, 0 , 0], [1, 0, 1], [1, 1, 0], [1, 1, 2]]