29

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

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。

4

8 回答 8

51
打印(分钟(a,b))
于 2009-01-11T02:30:58.283 回答
29

你不是很清楚你想要什么,所以有一些替代方案。给定以下两个列表:

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]
于 2009-01-11T04:21:26.313 回答
5

如果列表的长度是使它变低的原因(而不是它的值),那么您实际上想要:

min(a, b, key=len)

这只是偶然地等价于

min(a, b)

在给定的示例中。

于 2009-01-11T04:49:03.640 回答
4

min()应该完成你需要的

print(min(a,b))
于 2009-01-11T02:30:30.687 回答
1

抬头,min(a, b, key=len)我认为仅适用于python 2.5及更高版本。

(它不适用于我的带有 python 2.4 的 macbook,但我的 2.5 的 linux 服务器很好)

于 2009-01-14T03:56:06.677 回答
1

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

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

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

可选的 key 参数指定一个单参数排序函数,类似于 list.sort() 中使用的排序函数。如果提供了 key 参数,则必须采用关键字形式(例如,min(a,b,c,key=func))。

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

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

min(a,b) 

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

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

min(a,b, key=len)
于 2016-11-02T17:32:18.357 回答
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 语言不同。

于 2009-01-11T02:43:38.103 回答
-3

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

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

需要注意的一点是,如果它们相等,它将打印 length(b)

于 2009-01-11T02:38:50.937 回答