首页 > 解决方案 > 如何将代码转换为列表理解

问题描述

下面是一个工作代码:

if __name__ == '__main__':
    x = int(input("Enter x: "))
    y = int(input("Enter y: "))
    z = int(input("Enter z: "))
    n = int(input("Enter n: "))
    ar=[]
    p=0


for i in range ( x + 1 ) :
    for j in range( y + 1):
        for k in range( z + 1):
            if i+j+k != n:
                ar.append([])
                ar[p] = [i, j, k]
                p+=1
                print(ar[-1], end=" ")

输入:

x=1
y=1
z=1
n=2

输出:

[0, 0, 0] [0, 0, 1] [0, 1, 0] [1, 0, 0] [1, 1, 1] 

我的要求是将其转换为列表综合方法,如下所示:

[print ([x, y, z]) for i in range(x+1) for j in range(y+1) for k in range(z+1) if ( (i + j + k ) != n )]

标签: pythonlist-comprehension

解决方案


这部分对于您想要做的事情来说太复杂了:

ar.append([])
ar[p] = [i, j, k]
p+=1

正确的做法是:

ar.append([i, j, k])

而对于理解......这很容易,把它变成理解:

result = []
for XXXX:
    for YYYY:
        if ZZZZ:
            for QQQQ:
                result.append(RRRR)

只需这样做:

result = [RRRR for XXXX for YYYY if ZZZZ for QQQQ]

所以,在你的情况下:

ar = [[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]

推荐阅读