Как найти максимальное значение в списке, который содержит список в качестве значения? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть упражнение для класса в Python, и я застрял в вопросе 4:

  1. Создайте list1 с 200 случайными целыми числами в пространстве [1,50] и напечатайте какмного раз число равно 10.

  2. Создать list2 с 50 целыми числами [1,2,3, ..., 50], а затем с помощью функции append() объединить списки вместеи отобразите размер.

  3. Удалите данные с порядковым номером от 99 до 130 и напечатайте размер списка после удаления элементов.
  4. Найдите максимум и минимум в списке.

Моей первой мыслью о том, как найти MAX, была сортировка списка и получение последнего значения, но поскольку 1 элемент в списке является списком, я получаю эту ошибку TypeError: '<' not supported between instances of 'list' and 'int'.

Любойидеи о том, что я должен делать? Мой код до этого вопроса приведен ниже:

import numpy as np

#Question1
j= 0; 
list1 = list(range(200))  #decalre list1

for i in range(200): 
 list1[i] = np.random.randint(50)     #create a list of length 200 with values 0 to 50.
 if list1[i] == 10: 
   j = j+1

print("Number 10 exists ",j,"times in the list.")

#QUESTION2
list2 = list(range(1,51))  #Declare list2
list1.append(list2)  #append list2 on list1
print(len(list1)) 

#QUESTION3
for i in range(99,130):  # deletes the items with an index number from 99 to 130
   list1.pop(i)

print(len(list1))

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

Прежде чем проводить какие-либо сравнения, необходимо сначала сгладить список, поскольку вы не можете сравнить list с int. Для этого вы можете создать рекурсивную функцию и передать свой список

def flatten(l):
    return sum(([x] if not isinstance(x, list) else flatten(x) for x in l), [])

Помните, что list в приведенном выше коде является защищенным именем Python и относится к типу данных списка. Эта функция сравнивает каждый элемент в списках и проверяет, является ли он типом списка. Если нет, он добавляет его в список, если он снова вызывает функцию и переходит к следующему элементу. Теперь вы можете запустить следующее:

>>> list1 = [1, 2, 3, 4, [5, 6, 7, 8]]
>>> flatten(list1)
>>> [1, 2, 3, 4, 5, 6, 7, 8]

Теперь вы можете запускать встроенные в Python функции max() и min()

>>> max(flatten(list1))
>>> 8
>>> min(flatten(list1))
>>> 1
0 голосов
/ 24 октября 2019

Вот код, добавленный в ваш код:
list2 = list1.pop(-1) list3 = list1 + list2 print(max(list3)) print(min(list3))

Обратите внимание, что в списке 1 есть два списка!

0 голосов
/ 24 октября 2019

Python предоставляет встроенную функцию для решения этой проблемы:
max([2, 5, 4, 9, 3, 7])
9
Я бы объединил списки, поэтому добавляем элементы list2 в list1, так что у вас есть толькоодна ось, тогда вы можете использовать встроенную функцию
Если вы не хотите объединять список, вы можете сначала получить максимум списка внутри списка. Затем вы можете взять максимум этого максимума и другую часть вашего внешнего списка.

Также вы можете изменить эту строку:
list1[i] = np.random.randint(50)
Вы можете импортировать случайным образом (это встроенныймодуль) и сделайте это следующим образом:
list1[i] = random.randint(1, 50)
но, вероятно, numpy быстрее. Если вы хотите использовать numpy, вам все же нужно изменить строку на:
list1[i] = np.random.randint(1, 50)

Вам нужно изменить цикл удаления в вопросе 3, потому что если вы удаляете элемент 99, то элемент 100 будетновый элемент 99, поэтому вы удаляете только каждый второй элемент. Вы можете решить эту проблему, вернувшись назад со 130 на 99:
for i in range(130, 99):

Я надеюсь, что смогу помочь вам с этим вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...