2013-04-24 44 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