Короткий код Python, чтобы сказать "выбрать меньшее значение"?

Я имею в виду, Я ищу очень короткий код, который возвращает более низкое значение. например:

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 ответов


print(min(a, b))

вы не очень ясно, что вы хотите, поэтому некоторые альтернативы. Учитывая следующие два списка:

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() каждого списка, или do 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]

Если длина списка-это то, что делает его ниже (а не его значения), то вы действительно хотите:

min(a, b, key=len)

что только случайно эквивалентно

min(a, b)

в данном примере.


min() должен выполнить то, что вам нужно

print(min(a,b))

головы, min(a, b, key=len) работает только в Python 2.5 и выше я думаю.

(он не работает на моем macbook с python 2.4, но мой Linux-сервер с 2.5 в порядке)


следующее, что вы хотите?

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-подобных языков.


похоже, что этот ответ теперь может быть устаревшим. У меня был тот же вопрос и я нашел этот ответ, но не получил ожидаемых результатов. Оказывается, Min автоматически не возвращает более короткий из двух списков (в 2.7). Чтобы получить это, вы должны использовать аргумент " key " (введенный в 2.5) (курсив добавлен):

мин(типа Iterable [ключи]) мин(аргумент1, аргумент2, *параметр args [ключи]) возвращает наименьшее item в iterable или наименьшем из двух или более аргументов.

Если предоставлен один позиционный аргумент, iterable должен быть непустым iterable (например, непустая строка, кортеж или список). Меньшие масштабы элемента в массиве возвращается. если два или более позиционных аргументов предоставляются, возвращается наименьший из позиционных аргументов.

необязательный ключевой аргумент задает функцию упорядочения с одним аргументом как это используется для списка.род.)( Ключевым аргументом, если он указан, должен быть в форме ключевого слова (для пример, min (a,b,c,key=func)).

изменено в версии 2.5: добавлена поддержка дополнительного ключевого аргумента

Итак, в этом примере, хотя он, кажется, работает (и все еще будет в 2.7), он делает это только потому, что список целых чисел одинаковый. Однако, если это были два разных неупорядоченных списка, то:

min(a,b) 

вернет список с самым низким первый целое число.

чтобы быть уверенным, чтобы получить более короткого из двух списков, использовать:

min(a,b, key=len)

Я не знаю Python, но для чего-то подобного я бы использовал тернарный оператор.

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

одна вещь, чтобы отметить об этом, что если они равны, он будет печатать length (b)