12

Вопрос по list, python – Python найти мин и макс два списка

У меня есть два списка, таких как:

l_one = [2,5,7,9,3]
l_two = [4,6,9,11,4]

... и мне нужно найти минимальное и максимальное значение из обоих списков вместе взятых. То есть я хочу сгенерировать одну минимальную и одну максимальную величину.

У меня вопрос - какой самый питонный способ добиться этого?

Любая помощь высоко ценится.

  • @ Джордж: первая форма создает новый список, который будет содержать копии всех ссылок вl_one а такжеl_two, Этот шаг занимает некоторое время, пропорциональное длине списков. Вторая форма не требует копирования, поэтому она быстрее. (Это должно позвонитьmax() однако три раза, поэтому для очень коротких списков это может быть даже немного медленнее, но для очень коротких списков скорость в любом случае не имеет значения.)

    от
  • Таким образом, первый скопирует список и выяснит максиму (более дорогой по памяти). Но как насчет второго метода, он занимает больше времени с точки зрения скорости?

    от
  • @ Джордж: Нет, это также быстрее. Единственным недостатком является то, что он не читает так же хорошо, как первый.

    от
  • Можете ли вы объяснить или предоставить мне ресурсы, чтобы я мог понять причины этого? Должен ли я задать это как новый вопрос? Или это очень тривиально / зависит от реализации.

    от
  • @ Джордж: причины чего?

    от
  • Должно ли это быть помечено как домашнее задание?

    от Scott C Wilson
5 ответов
  • 31

    Возможно, самый читаемый способ max(l_one + l_two)

    Возможно, самый читаемый способ

    max(l_one + l_two)
    

    или же

    min(l_one + l_two)
    

    Это будет копировать списки, так какl_one + l_two создает новый список. Чтобы избежать копирования, вы можете сделать

    max(max(l_one), max(l_two))
    min(min(l_one), min(l_two))
    

  • 2

    Вы можете объединить их и затем вызвать min или max:

    >>> l_one = [2,5,7,9,3]
    >>> l_two = [4,6,9,11,4]
    >>> min(l_one + l_two)
    2
    >>> max(l_one + l_two)
    11
    

  • 12

    Еще один способ избежать копирования списков

    >>> l_one = [2,5,7,9,3]
    >>> l_two = [4,6,9,11,4]
    >>> 
    >>> from itertools import chain
    >>> max(chain(l_one, l_two))
    11
    >>> min(chain(l_one, l_two))
    2
    

  • 2

    если у вас есть списки

    как у вас, это работает, даже со списками разных размеров:

    min(min([i1,i2,i3]))
    

    У вас может даже быть более разумное решение, которое работает с другим массивом numpy:

    import numpy as np
    i1=np.array(range(5))
    i2=np.array(range(4))
    i3=np.array(range(-5,5))
    np.min(np.concatenate([i1,i2,i3]))
    

  • 0

    Если вы хотите выбрать максимальные или минимальные значения из двух с

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

    from numpy import maximum
    result = maximum(l_one,l_two)
    

    Он вернет максимальное значение после сравнения каждого элемента в этих двух списках.