我是否认为你只能在python 2.5及更高版本中的列表推导中使用else?
那么在2.4中实现以下目标的最佳方法是什么?
print [x if x != "3" else "1" + "3" for x in ["1","2","3"]]
答案 0 :(得分:2)
我相信条件表达式在python 2.5中是新的。一个旧的解决方法是使用:
("13",x)[x!=3]
这样做会创建一个元组(("1",x)
),然后使用布尔值(True
(1
)或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兼容的“单行条件”不值得(我认为)他们阅读的令人困惑的方式。