Как удалить макс. и мин. значения в списке, когда их имеется несколько?

Рейтинг: 1Ответов: 2Опубликовано: 29.03.2023

Есть код, смысл удалить минимальные и максимальные значения в списке. Например, есть список [6, 2, 7, 1, 7, 1, 2] и надо удалить все единички и сёмерки, чтобы было [6, 2, 2]. Я могу найти их индексы, но как их удалить?

a=list(map(int, input().split()))
max_value=max(a)
min_value=min(a)
max_index=[]
min_index=[]
for i in range(len(a)):
    if a[i]==max_value:
        max_index.append(i)
    elif a[i]==min_value:
        min_index.append(i)
print(max_index)
print(min_index)

Ответы

▲ 4Принят

Можно реализовать с помощью фильтра. Мин и макс делаем в виде кортежа, в условии фильтра проверяем, что значение не находится в этом кортеже.

lst = [6, 2, 7, 1, 7, 1, 2]
minmax = min(lst), max(lst)
lst = list(filter(lambda x: x not in minmax, lst))
print(lst)

Аналогично с помощью спискового включения:

lst = [6, 2, 7, 1, 7, 1, 2]
minmax = min(lst), max(lst)
lst = [x for x in lst if x not in minmax]
print(lst)
[6, 2, 2]
▲ 0
lst = [6, 2, 7, 1, 7, 1, 2]

способ 1:

res = [v for v in lst if min(lst) < v < max(lst)]

способ 1.1 (побыстрее):

r = min(lst)
s = max(lst)
res = [v for v in lst if r < v < s]

способ 1.2 (1.1 через фильтр):

res = [*filter(lambda v: r < v < s, lst)]