Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将循环块转换为列表_Python - Fatal编程技术网

Python 将循环块转换为列表

Python 将循环块转换为列表,python,Python,我想转换这个代码段 for val in G[k]: if val in span[k]: result.append((val,col)) elif val in G[k] and val not in span[k] and S[val][k] != 'col': result.append((val,row)) 进入列表理解。但这给了我一个错误: [(val,col) if val in span[k] else (val,row) if

我想转换这个代码段

for val in G[k]:
    if val in span[k]:
        result.append((val,col))
    elif val in G[k] and val not in span[k] and S[val][k] != 'col':
        result.append((val,row))
进入列表理解。但这给了我一个错误:

[(val,col) if val in span[k] else (val,row) if val in G[k] and val not in span[k] and S[val][k] != 'col' for val in G[k]]
那么,如果有更改,正确的语法是什么

[(val,col) if val in span[k] else (val,row)
 if val in G[k] and val not in span[k] and S[val][k] != 'col'
 for val in G[k]]

经验法则如果在理解过程中的
之前有一个
如果
,那么它必须有一个
否则
改变

[(val,col) if val in span[k] else (val,row)
 if val in G[k] and val not in span[k] and S[val][k] != 'col'
 for val in G[k]]


经验法则如果理解中的
在之前有一个If,那么它必须有一个else您使用的条件表达式没有else部分;这是一个语法错误

正确的翻译是:

[(val,col) if val in span[k] else (val,row) for val in G[k] if val in span[k] or S[val][k] != 'col']
e、 g.首先过滤掉与两个条件不匹配的任何内容,然后在两个分支之间选择确实会导致向输出中添加内容的值

我简化了条件;在第二个表达式中有一些冗余测试(
val in G[k]
对于循环
G[k]
总是正确的,如果span[k]中的
val不是
true
则span[k]
中的逆
val不是
true,并且不需要再次测试

就我个人而言,我觉得显式的
for
循环更具可读性,但您至少可以用同样的方式简化它:

for val in G[k]:
    if val in span[k]:
        result.append((val,col))
    elif S[val][k] != 'col':
        result.append((val,row))

您使用的条件表达式没有
else
部分;这是一个语法错误

正确的翻译是:

[(val,col) if val in span[k] else (val,row) for val in G[k] if val in span[k] or S[val][k] != 'col']
e、 g.首先过滤掉与两个条件不匹配的任何内容,然后在两个分支之间选择确实会导致向输出中添加内容的值

我简化了条件;在第二个表达式中有一些冗余测试(
val in G[k]
对于循环
G[k]
总是正确的,如果
val in span[k]
不是
true
,则相反的
val不在span[k]
当然也是
正确的
,无需再次测试

就我个人而言,我觉得显式的
for
循环更具可读性,但您至少可以用同样的方式简化它:

for val in G[k]:
    if val in span[k]:
        result.append((val,col))
    elif S[val][k] != 'col':
        result.append((val,row))

不要这样做。它的可读性比普通循环差得多-至少如果你以一行程序的形式编写它。不要这样做。它的可读性比普通循环差得多-至少如果你以一行程序的形式编写它。谢谢Martijn。理解比普通循环快是真的吗?@user2290820:别忘了维护也需要努力。不要忘记如果不能读懂代码的代价以后会影响你,那么不要过早地优化速度。@user2290820:列表理解可能比使用
.append()
循环的
更快,是的,但是你的列表组件必须在span[k]中测试
val
两次。很酷,当然。注释中包含了更简单的可读逻辑。如何?如果这是在代码中的时间关键路径上,我会测试计时(使用
timeit
模块),否则我就自己用一个
来进行
循环。谢谢Martijn。理解比通常的循环更快是真的吗?@user2290820:别忘了维护也需要努力。如果不能阅读代码的代价会让你以后痛苦不堪,不要过早地优化速度。@user2290820:a list comprehension可以比使用
.append()
循环快,是的,但是您的列表comp必须在span[k]
中测试
val两次。很酷,当然。注释包括更简单的可读逻辑。怎么样?如果这是在代码中的时间关键路径上,我会测试计时(使用
timeit
模块),否则我只会对自己使用
循环。