2

我是否相信您只能在 python 2.5 及更高版本的列表推导中使用 else ?

即在 2.4 中实现以下目标的最佳方法是什么?

print [x if x != "3" else "1" + "3" for x in ["1","2","3"]]
4

4 回答 4

2

我相信条件表达式在 python 2.5 中是新的。一种旧的解决方法是使用:

("13",x)[x!=3]

它的作用是创建一个元组 ( ("1",x)),然后用布尔值 ( True( 1) 或False( 0)) 对其进行索引。

把它们放在一起,你会得到:

[("13",x)[x!="3"] for x in ("1","2","3")]

这个成语很难阅读,值得问问自己是否真的需要支持 python2.4。一个稍微冗长的替代方法是使用一个函数:

def conditional_expr(a,cond,b):
    if cond:
        return a
    else:
        return b

换句话说:

[conditional_expr(x,x!='3','13') for x in ("1","2","3")]

当然,这些实际上都不能与能够短路的条件表达式进行比较(例如,如果条件是True,则不需要评估返回值False

于 2012-11-29T07:08:25.037 回答
1

你可以利用地图...

In [38]: def f(x):
   ....:     if x != "3":
   ....:         return x
   ....:     else:
   ....:         return "1" + "3"
   ....:

In [39]: map(f, ["1", "2", "3"])
Out[39]: ['1', '2', '13']

'Janne Karila' 建议的另一种方法

In [40]: [f(x) for x in ["1", "2", "3"]]
Out[40]: ['1', '2', '13']
于 2012-11-29T07:17:07.427 回答
1

我不知道 2.4 中的列表推导。但无论如何,经典的 for 循环都可以。

l = []
for x in ["1","2","3"]:
    if x != "3":
        l.append(x)
    else:
        l.append("1" + "3")
print l
于 2012-11-29T07:08:51.173 回答
0

你需要一个完整的for循环,你只需要测试一个if语句:

results = []
for x in ["1","2","3"]:
    if x == "3":
        x = "1" + "3"
    results.append(x)

一些兼容 python2.4 的“单行条件”不值得(我认为)他们阅读的令人困惑的方式。

于 2012-11-29T07:10:00.027 回答