繁体   English   中英

for循环内联python中的if else语句

[英]if else statement in a for loop inline python

我正在运行以下代码,但遇到错误:

name_map = dict(zip(face_names,
                    [e+'.png' for e in 
                        [face_names[0]+(label.split()[0])]
                            if label=='suit' 
                            elif label != 'suit' face_names

我的错误:

SyntaxError: invalid syntax

从'elif'开始,它失败了。

我想要......如果标签=='西装'

name_map={'john':'johnsuit.png''}

除此以外

name_map={'john':'john.png'}

尝试或改为始终将独立的布尔术语括在括号中。 这有效:

l = [1,2,3]
[x for x in l if (x == 2) or (x == 1)]
name_map = dict(zip(face_names,
                    [e+'.png' for e in 
                        [face_names[0]+(label.split()[0])]
                            if label=='suit' 
                            elif label != 'suit' face_names
  1. 您还没有关闭这么多构造函数: dictzip函数和列表推导式( zip第二个参数)都仍然打开。
  2. 您的三元运算符(内联if )是非法的:查找语法; 除此之外, elif不是这种表达式的一部分。

看看我是不是理解这个:如果标签是“suit”,你要构造一个文件名; 如果没有,您只想使用face_names作为文件名。 然后让我们写那部分:

[face_names[0] + label.split()[0]] if label == "suit"
    else face_names

是你写的时候的表情。 在你的整个陈述中,这可能会变成

name_map = dict(zip(face_names,
                      [e+'.png' for e in 
                          [ face_names[0] + label.split()[0] ]
                      ] if label == "suit"
                        else face_names
                    )
               )

因此,如果标签==“西装”,你在第二个列表中的一个元素; 否则,该参数是一个face_names列表,每个都附加了“.png”。 如果这不是您想要的,请适当更新帖子。


根据 OP 评论更新

看来您的问题是是否在每个文件名的末尾添加“suit”。 在这种情况下,逻辑要简单得多:

face_names = ["john"]
label = "suit"

name_map = dict(zip(face_names,
                      [e + ('suit.png' if label=="suit" else ".png")
                          for e in face_names]
                    )
               )

print(name_map)

这产生:

{'john': 'johnsuit.png'}

如果我将标签更改为"not_a_suit" ,我们会得到

{'john': 'john.png'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM