Короткий код 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 ответов
вы не очень ясно, что вы хотите, поэтому некоторые альтернативы. Учитывая следующие два списка:
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(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)