列表理解2.4

时间:2012-11-29 07:04:15

标签: python list python-2.4 list-comprehension

我是否认为你只能在python 2.5及更高版本中的列表推导中使用else?

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

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

4 个答案:

答案 0 :(得分:2)

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

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

这样做会创建一个元组(("1",x)),然后使用布尔值(True1)或False({{1})对其进行索引}))。

总结你得到:

0

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

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

换句话说:

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,则不需要评估返回值。 })

答案 1 :(得分:1)

我不知道2.4中的列表理解。但是在任何情况下都会有一个经典的for循环。

l = []
for x in ["1","2","3"]:
    if x != "3":
        l.append(x)
    else:
        l.append("1" + "3")
print l

答案 2 :(得分: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']

答案 3 :(得分:0)

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

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

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