簡體   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