给定两个字符串,如何将较短的字符串分配给一个变量,将较长的字符串分配给另一个变量

时间:2018-09-13 08:37:46

标签: python python-3.x python-3.6

我正在学习python,想知道是否有 pythonic 的方式。我当然可以做

if len(a) > len(b) :
  (x,y) = (b,a)

,依此类推。但这似乎有些冗长。在python中有更美丽的方法吗?

6 个答案:

答案 0 :(得分:6)

排序似乎有点矫kill过正。您只需使用if就可以做到这一点。

x,y = (a,b) if len(a) < len(b) else (b,a)

答案 1 :(得分:2)

x = min(a, b, key=len)
y = max(a, b, key=len)

重复,但意图很明确。

编辑:

由于ab接受了可变数量的参数,因此删除了括号,使元组从minmax中消失。

答案 2 :(得分:1)

找到一种方法。

(x,y) = sorted([a,b], key = len)

答案 3 :(得分:1)

使用 min(n1,n2,n3,...)

>>> n1 = "abcdefghijkl"
>>> n2 = "abc"
>>> min((n1,n2), key=len)
'abc'
>>> max((n1,n2), key=len)
'abcdefghijkl'

答案 4 :(得分:1)

这个问题似乎真的是基于观点的,因此,我认为我们应该参考Zen of Python来定义 beautiful ,尤其是:

  

扁平比嵌套好。
  稀疏胜于致密。
  可读性很重要。

基于这些原因,我认为您的方法:

if len(a) > len(b) :
    (x,y) = (b,a)
else:
    (x,y) = (a,b)

最好的

答案 5 :(得分:0)

只是一个如何使用 dict 的演示

解决方案 1:

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)

使用列表:

解决方案 2:

x, y = [[a, b], [b, a]][len(a) > len(b)]

虽然我的首选方法是

x, y = sorted([a, b], key=len)