简短的Python代码说“选择较低的价值”?

时间:2009-01-11 02:21:44

标签: python code-snippets

我的意思是, 我正在寻找返回较低值的真正短代码。 例如:

a=[1,2,3,4,5,6,7,8,9,10]
b=[1,2,3,4,5,6,7,8]
len(a) = 10
len(b) = 8
if (fill-this-in):
     print(lesser-value)

我忘了补充一点,如果b低于a,我希望b返回 - 而不是len(b) - 变量b。

8 个答案:

答案 0 :(得分:34)

print(min(a, b))

答案 1 :(得分:28)

你并不是很清楚自己想要什么,所以有些选择。给出以下两个列表:

a = [1,2,3,4,5,6,7,8,9,10]
b = [1,2,3,4,5,6,7,8]

要打印最短的列表,您可以这样做..

>>> print(min(a, b))
[1, 2, 3, 4, 5, 6, 7, 8]

要获得最短的长度作为数字,您可以min每个列表的len(),或len(min())(两者都相同,选择您认为最易读的内容) ..

>>> print(min( len(a), len(b) ))
# or..
>>> print(len( min(a, b) ))
8

要打印任一列表中的最低值,您可以将列表作为单个参数提供给min()

>>> a.extend(b) # Appends b to a
>>> print a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8]
>>> print(min(a))
1

最后,另一种可能性,即总值最低的列表:

>>> max( sum(a), sum(b) )
55

要打印具有最高sum()的实际列表,您可以使用三元运算符,例如..

>>> print a if sum(a) > sum(b) else b
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

..虽然我从来没有真正喜欢(或使用)它,而是使用稍微长一点的常规if / else语句..

>>> if sum(a) > sum(b):
...     print a
... else:
...     print b
... 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

答案 2 :(得分:5)

如果列表的长度是降低它的值(不是它的值),那么你实际上想要:

min(a, b, key=len)

只是偶然相当于

min(a, b)

在给定的例子中。

答案 3 :(得分:4)

min()应该完成你需要的东西

print(min(a,b))

答案 4 :(得分:1)

抬头,min(a, b, key=len)仅适用于python 2.5及以上版本。

(它不能用我的macbook上的python 2.4,但我的linux服务器2.5很好)

答案 5 :(得分:1)

现在看来这个答案可能已经过时了。我刚才有同样的问题并找到了答案,但没有得到我预期的结果。结果Min不会自动返回两个列表中较短的一个(在2.7中)。为此,你必须使用'key'参数(在2.5中引入)(强调添加):

  

min(iterable [,key])min(arg1,arg2,* args [,key])返回最小的   可迭代中的项或两个或多个参数中的最小值。

     

如果提供了一个位置参数,则iterable必须是非空的   iterable(例如非空字符串,元组或列表)。最小的   返回iterable中的项目。 如果两个或多个位置参数   如果提供,则返回最小的位置参数。

     

可选键参数指定单参数排序函数   就像用于list.sort()的那样。必须提供关键参数(如果提供)   以关键字形式(例如,min(a,b,c,key = func))。

     

在2.5版中更改:添加了对可选键参数的支持

所以在这个例子中,尽管它似乎有用(并且仍然在2.7中),但它只是因为整数列表是相同的。但是,如果这些是两个不同的非有序列表,那么:

min(a,b) 

将返回具有最低第一个整数的列表。

为了确保获得两个列表中较短的一个,请使用:

min(a,b, key=len)

答案 6 :(得分:0)

以下是你想要的吗?

if len(a) < len(b):
    print a
else:
    print b

或者,如果你想使用像@Andrew G. Johnson这样的三元运算符:

print a if len(a) < len(b) else b

PS。请记住,Python不会对其块使用大括号,并且它的三元运算符与类C语言不同。

答案 7 :(得分:-3)

我不知道Python但是对于这样的事情,我会使用三元运算符。

print(length(a) < length(b) ? length(a) : length(b))

有一点需要注意的是,如果它们相等,则会打印长度(b)