我正在学习Python,想知道是否有符合Python风格的方法来完成这个任务。当然我能够做一个,但是我想了解一下更好的实践方法。
if len(a) > len(b) :
(x,y) = (b,a)
等等。但这似乎有点啰嗦。在 Python 中有更加优美的方式吗?
if len(a) > len(b) :
(x,y) = (b,a)
等等。但这似乎有点啰嗦。在 Python 中有更加优美的方式吗?
排序似乎有点过度了。你只需要使用if
就可以在一行中完成。
x,y = (a,b) if len(a) < len(b) else (b,a)
x = min(a, b, key=len)
y = max(a, b, key=len)
重复,但意图明确。
移除括号,因为min
和max
可以接受可变数量的参数而不需要将a
和b
转换为元组。
sort
结合会更好。这样你只需要运行一次比较。 - Ma0(x,y) = sorted([a,b], key = len)
if
比使用sorted
所需的时间更短。(即,在我的机器上使用if
需要0.007247173540780684
,而使用sorted
需要0.012815168972169048
) - Abdul Niyas P M>>> n1 = "abcdefghijkl"
>>> n2 = "abc"
>>> min((n1,n2), key=len)
'abc'
>>> max((n1,n2), key=len)
'abcdefghijkl'
min('111', '0000')
will return '0000'
. This doesn't do what you think it does. You can however give len
as a key to min
- user3483203min
/ max
。这仍然是O(n)复杂度,虽然是一个两遍的解决方案,但不涉及创建中间字符串的list
或tuple
。a = 'hello'
b = 'test'
x, y = (func(a, b, key=len) for func in (min, max))
print(x, y, sep='\n')
# test
# hello
Here's a functional version:
from operator import methodcaller
x, y = map(methodcaller('__call__', a, b, key=len), (min, max))
出于这些原因,我认为你的做法:扁平比嵌套好。
稀疏比密集好。
可读性很重要。
if len(a) > len(b) :
(x,y) = (b,a)
else:
(x,y) = (a,b)
是最好的。
a = [3]
b = [2,3 ]
_bool = len(a)<len(b)
d = { True : a, False : b}
x = d[_bool]
y = d[not _bool]
print(x, y)
x, y = [[a, b], [b, a]][len(a) > len(b)]
x, y = sorted([a, b], key=len)