python - 如何将代码转换为列表理解
问题描述
下面是一个工作代码:
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 )]
解决方案
这部分对于您想要做的事情来说太复杂了:
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]
推荐阅读
- css - Reactjs - 未出现完整图像
- ruby-on-rails - 我在 Ubuntu 服务器上设置的 Ruby on Rails 环境变量没有被读取
- javascript - 在 React 16 中不推荐使用“this.refs”时如何使用“mainPanel”?
- bash - 强制 sed 在目标文件中只替换一次匹配的行
- scala - 如何将行/字符串列表制作成子列表
- django - 当 Django 将可序列化事务隔离级别与 postgresql 一起使用时,哪些特定异常表示序列化失败?
- html - HTML 网站 - 右侧被背景截断
- java - 来自 docker 容器内部的 SSH
- python - 将值分配给相同的列表,但得到不同的结果
- sql-server - 如何在 SQL 中重命名 xml 根元素