在Python中将if else语句转换为单行

4
如何将下面的if else语句变成一行代码?
uly = '50'

if '-' in uly:
     uly = uly.replace('-','S')
else:
     uly = 'N'+uly

print uly

我的试用:

uly = [uly=uly.replace('-','S') if '-' in uly else uly = 'N'+uly]
print uly

1
为什么你一定需要压缩成一行呢?大多数人会觉得这样更易读。 - George
如果可能的话,只是为了缩短我的代码。 - Taylor
3
你应该优化可读性,而不是追求代码长度。你目前的写法完全没有问题,我个人强烈倾向于显式的if-else写法,而非单行版本。 - Roger Fan
我在学习Python之前是一名Perl程序员,所以当我转向Python时,我有一种非理性的需求,即尽可能让我的Python代码变得短小而巧妙,因为这正是Perl鼓励的。过了一段时间,我才克服了这个问题,而且当我做到了这一点,编写代码实际上变得更加愉快。如果我的经历与你的相似,请考虑忘记所有你锁定的Perl习惯用语,并停止关注最短可能的代码。 - SethMMorton
2个回答

9
以下将实现它:
uly = uly.replace('-', 'S') if '-' in uly else 'N' + uly

这里使用所谓的条件表达式(类似于if语句,但它是一个表达式而不是语句)。
你现在尝试使用列表推导,但由于没有涉及到列表,所以不适用。
除此之外,我建议您重新考虑优化最短代码。一般来说,可读性应该胜过紧凑性。

0

试一下这个

uly = '-' in uly and uly.replace('-','S') or 'N'+uly

1
我对这种惯用语很熟悉,在条件表达式出现之前的那些日子里经常使用它,尽管它有一个缺点,即如果在“and”后面的表达式求值为false,则可能不能做到您想要的。所以现在当我认为需要使用单行命令时,我更倾向于使用条件表达式。另一方面,我确实认为可读性胜过保存几行代码,显示if-else构造通常比一行版本更易读。 - PM 2Ring

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接