Python 正在寻找下面关于如何查找长方体坐标的代码的解释?

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+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])
样本输入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。谢谢