Python 正在寻找下面关于如何查找长方体坐标的代码的解释?
我能够用问题中给出的示例输入和输出写出下面的代码,但我严重缺乏这个问题背后的概念。有人能解释一下这个程序是如何从头到尾工作的吗?比如为什么我们要用x+1和y+1。。等等,谢谢Python 正在寻找下面关于如何查找长方体坐标的代码的解释?,python,python-3.x,list,for-loop,list-comprehension,Python,Python 3.x,List,For Loop,List Comprehension,我能够用问题中给出的示例输入和输出写出下面的代码,但我严重缺乏这个问题背后的概念。有人能解释一下这个程序是如何从头到尾工作的吗?比如为什么我们要用x+1和y+1。。等等,谢谢 x = int(input()) y = int(input()) z = int(input()) n = int(input()) print([[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])
x = int(input())
y = int(input())
z = int(input())
n = int(input())
print([[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])
样本输入0
一,
1.
1.
二,
样本输出0
[0,0,0],[0,0,1],[0,1,0],[1,0,0],[1,1,1]。列表理解:
[[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]
如果展开,则更具可读性:
[
[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
]
这相当于常规循环:
ret = []
for i in range(x+1): # 0, 1, ..., x
for j in range(y+1): # 0, 1, ..., y
for k in range(z+1): # 0, 1, ..., z
if i+j+k != n:
ret.append([i,j,k])
基本上,保持立方体[0,x]*[0,y]*[0,z]中的每个三元组的和不是n
该函数构建一个不可变序列。rangestop是序列0,1,…,stop-1。因此,rangex+1是序列0,1,…,x。存在其他参数,请参见链接
当x,y,z,n=1,1,1,2时,你有:
ret = []
for i in (0, 1): # 0, 1
for j in (0, 1): # 0, 1
for k in (0, 1): # 0, 1
if i+j+k != 2:
ret.append([i,j,k])
三元组:[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,1],[1,1,0],[1,1,1]经过测试,[0,1,1],[1,1,0,1],[0,1,0],[0,0,1,0],[1,1,0],[1,1,0,0],[1,0,0],[1,1,1]。学习更多的Python和编程知识可能会更好。堆栈溢出不是指南或教程。指南!=指导无法获取逻辑,因为它是纯数学的。这对我来说似乎很奇怪,纯数学在什么意义上?好吧,哪一部分是有问题的,确切地说?哪一部分是有问题的?您是否尝试将其转换为标准for循环?这可能会让事情变得更清楚。这就是我在写Stack Overflow时的意思,Stack Overflow并不是一个[完整的]指南或教程。你可以找到大量学习Python的优秀资源,文档也相当不错。在书上用什么书?如果你有一本书,里面应该有一些解释,不是吗?因为他特别要求x+1,我会补充一个关于Range如何工作的简短解释。告诉他,它迭代从0开始的数字,在提供的输入之前停止一步。此外,还有其他参数允许指定起点和步长。@adrio Done。谢谢