我是否相信您只能在 python 2.5 及更高版本的列表推导中使用 else ?
即在 2.4 中实现以下目标的最佳方法是什么?
print [x if x != "3" else "1" + "3" for x in ["1","2","3"]]
我是否相信您只能在 python 2.5 及更高版本的列表推导中使用 else ?
即在 2.4 中实现以下目标的最佳方法是什么?
print [x if x != "3" else "1" + "3" for x in ["1","2","3"]]
我相信条件表达式在 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
)
你可以利用地图...
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']
我不知道 2.4 中的列表推导。但无论如何,经典的 for 循环都可以。
l = []
for x in ["1","2","3"]:
if x != "3":
l.append(x)
else:
l.append("1" + "3")
print l
你需要一个完整的for
循环,你只需要测试一个if
语句:
results = []
for x in ["1","2","3"]:
if x == "3":
x = "1" + "3"
results.append(x)
一些兼容 python2.4 的“单行条件”不值得(我认为)他们阅读的令人困惑的方式。