2013-04-24 10 views
0

讓說我有一個包含字符串列表:TA,FA,BA,UT,讓撥打我們的名單是some_list = ['ta', 'fa', 'ba', 'ut']的Python:列表理解在unicode validaton

我想要做的是,在僞代碼:

for x in some_list: 
    if unicode(x, 'utf-8') == another_unicoded_string: 
     do something: 

但我想這樣做,使用列表中理解的Python的方式:

所以這是我如何做,但這不是真正的工作:

if [x for x in some_list if unicode(x, 'utf-8') == 'te']: 
在上述情況下

它不應該匹配這樣真的不應該進入基於環路什麼我寫它不進入本聲明兩種方式:

+2

列表理解應該只有真正使用。如果你只是想執行一些代碼,如果你的列表元素滿足特定的標準,那麼就使用'for'循環。 – Aya 2013-04-24 18:27:40

+0

[x for x in ...]的輸出是一個列表,如果列表中有任何內容,則該列表始終爲真。 (例如,如果[False]:語句...始終爲真並執行該語句)要檢查列表元素或對其執行操作,您必須諮詢「any」,「all」,「map」,「filter」等... – Dusk 2013-04-24 18:32:09

+1

此外,您的「僞代碼」版本比任何基於列表理解的解決方案更容易理解和更高效。 – Aya 2013-04-24 18:35:25

回答

0

嘗試:

for x in (x for x in some_list if unicode(x, 'utf-8') == 'te'): 
    do_something 

或(較低的效率 - 您的建議感謝jamaylak),

for x in [x for x in some_list if unicode(x, 'utf-8') == 'te']: 
    do_something 
+1

我建議把這個切換到一個生成器'for x in(x for x in some_list如果unicode(x,'utf-8')=='te'):' – jamylak 2015-06-02 17:23:59

0

你在做什麼回報過濾列表。所以我的猜測是你正在嘗試做這樣的事情。

[do_something(x) for x in some_list if unicode(x, 'utf-8') == u'te'] 

作爲更有點冗長:如果你想返回一個列表

>>> some_list 
['ta', 'fa', 'ba', 'te', 'ut', 'te'] 
>>> [x for x in some_list if unicode(x, 'utf-8') == u'te'] 
['te', 'te'] 
>>> [unicode(x) for x in some_list if unicode(x, 'utf-8') == u'te'] 
[u'te', u'te'] 
+0

我也想到了這個答案@Alex,但是缺點是存儲結果。 OP沒有具體說明要做什麼(以及他們是否想要結果)。 – jmetz 2013-04-24 18:28:02

+1

那麼它總是很好的展示Python的函數式編程能力;) – Alex 2013-04-24 18:32:03

+1

哈哈,好吧,只要'do something'不是Python 2x中的'print x'; – jmetz 2013-04-24 18:35:51