【发布时间】:2018-04-25 22:57:14
【问题描述】:
我一直在尝试使用列表推导来简化这段代码:
c = 0
conv_regx = r'(Conv2d).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*'
for layer in list(cnn):
if "Conv2d" in str(layer):
print(re.sub(conv_regx, r'\3 \2 \4 \5', str(layer)))
c+=1
if c == len(layerList['C']):
break
但我的尝试导致错误:
conv_regx = r'(Conv2d).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*?(\d+).*'
print_name = [str(re.sub(conv_regx, r'\3 \2 \4 \5', str(i))) if "Conv2d" in str(i) for i in list(cnn)]
像这个错误:
print_name = [str(re.sub(conv_regx, r'\3 \2 \4 \5', str(i))) if "Conv2d" in str(i) for i in list(cnn)]
^
SyntaxError: invalid syntax
如何正确使用列表推导来完成这项任务?
编辑:
我修复了 for 和 if 混淆,但如何打印字符串?
[print(str(re.sub(conv_regx, r'\3 \2 \4 \5', str(i)))) for i in list(cnn) if "Conv2d" in str(i) ]
[print(str(re.sub(conv_regx, r'\3 \2 \4 \5', str(i)))) for i in list(cnn) if "Conv2d" in str(i) ]
^
SyntaxError: invalid syntax
【问题讨论】:
-
列表理解中的
if子句位于for子句之后。 -
谢谢!它有效,但我需要打印新字符串。这似乎不起作用:
[print(str(re.sub(conv_regx, r'\3 \2 \4 \5', str(i)))) for i in list(cnn) if "Conv2d" in str(i) ] -
也没有必要将
re.sub()结果转换为str()- 它已经是一个字符串了。 -
如果您实际上并不关心收集列表中的所有字符串,则使用列表推导式没有多大意义。只需在原始代码中使用
for循环即可。