if i == len(a):
tempList.extend(b[j:])
break
elif j == len(b):
tempList.extend(a[i:])
break
我在Python的mergesort程序中使用它。有没有办法把它变成一个oneliner?
答案 0 :(得分:7)
也许,但让我们给出一个专门的非答案:甚至不尝试。
您不会将代码编写为简短。你这样写:
上面的代码已经这样做了。
换句话说:当然精确是源代码的宝贵属性。所以,当你必须同样可读的代码片段做同样的事情,而一个版本是一个单行,而另一个版本更冗长 - 那么你选择短版本。
但是我非常怀疑上面的内容可以表达为,如上所述 - 代码更少。
答案 1 :(得分:1)
您可以使用cf.head
和and
boolean operations制作一个非常易读的单行代码:
or
此示例使用下一个属性:
表达式
l = [] a = [1,2,3,4] b = [8,9,10] i = 4 j = 2 l.extend(i == len(a) and b[j:] or j == len(b) and a[i:] or []) l == [10] i = 0 j = 3 l.extend(i == len(a) and b[j:] or j == len(b) and a[i:] or []) l == [10, 1, 2, 3, 4]
首先评估x and y
;如果x
为false,则返回其值;否则,将评估x
并返回结果值。表达式
y
首先评估x or y
;如果x
为真,则返回其值;否则,将评估x
并返回结果值。
我们必须添加y
以缓解or []
时引发的TypeError: 'bool' object is not iterable
异常(例如i == len(a) and j > len(b)
)。
我仍然喜欢扩展版本。