У меня есть список списков, и я хочу получить максимальный элемент из него.

communities
Out[23]: 
     [[1, 25, 33, 37, 45, 89, 103, 105, 109],
      [19, 29, 30, 35, 55, 79, 94, 101],
      [2, 6, 13, 15, 32, 39, 47, 60, 64, 100, 106],
      [3, 5, 10, 40, 52, 72, 74, 81, 84, 98, 102, 107],
      [44, 48, 57, 66, 75, 86, 91, 92, 110, 112],
      [36, 42, 80, 82, 90],
      [12, 14, 18, 26, 31, 34, 38, 43, 54, 61, 71, 85, 99],
      [0, 4, 9, 16, 23, 41, 93, 104],
      [7, 8, 21, 22, 51, 68, 77, 78, 108, 111],
      [17, 20, 27, 56, 62, 65, 70, 76, 87, 95, 96, 113],
      [11, 24, 50, 59, 63, 69, 97],
      [28, 46, 49, 53, 58, 67, 73, 83, 88, 114]]

max(max(communities))
      Out[24]: 112

Это должно дать мне 114, но я не понимаю, почему это дает мне 112

0
user9731699 5 Июл 2019 в 10:21

4 ответа

Лучший ответ

Вы также можете сделать это следующим образом:

max(sum(communities,[]))

выход: 114

4
NFR 5 Июл 2019 в 07:36

Потому что max(communities) это [44, 48, 57, 66, 75, 86, 91, 92, 110, 112]

Вы хотите перебрать сообщества и запомнить через переменную максимум каждого сообщества:

communities_max = 0
for community in communities:
  community_max = max(community)
  if community_max > communities_max:
    communities_max = community_max
print(communities_max) # 114
3
Adelin 5 Июл 2019 в 07:25

Это интересный вопрос. Позвольте мне сначала ответить, почему это происходит, а затем рассказать, как это исправить.

Когда функция max применяется к списку списков. По умолчанию сортируется итеративное лексикографическое упорядочение. например, при сравнении списков сравниваются первые элементы обоих элементов, если оба они одинаковы, то следующие 2 элемента и т. д. до тех пор, пока один из элементов списка не станет больше, чем другой, в котором этот список выбран ,

Например

a = max([3,3,10],[3,4,5])
print(a)

Выберет [3,4,5], потому что второй элемент 4 больше 3.

Чтобы решить это в идеале, вы можете рассчитать это по-другому.

Так как в вашем списке списков все отсортировано.

largest_value = max(communities,key = lambda x: x[-1])[-1]

Изменить 1: чтобы помочь людям понять, как это сделать для несортированного массива. Это очень просто

largest_value = max(communities, key = max)

Редактировать 2: Извините, я неправильно понял алгоритмический выбор максимальной функции. Спасибо @ikkuh за указание на это. Я изменил его до правильной версии.

0
Kenstars 5 Июл 2019 в 07:54

Вы можете сделать это с пониманием списка:

print (max([max(item) for item in communities]))

Выход:

114
4
ncica 5 Июл 2019 в 14:16