2016-01-03 2 views
0

Так что я хочу удалить наибольшее целое число в списке неизвестных целых чисел. В принципе у меня есть это:Как вы находите и удаляете наивысшее целое число в списке неизвестных целых чисел

list=[x,y,z...] 

Я знаю, как найти наибольшее целое число:

max=max(list) 

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

+0

Что вы пробовали? Самое простое решение, вероятно, состоит в сортировке списка и удалении соответствующей конечности. – Arc676

+0

'list.pop (list.index (max (list)))' ?? Если одно максимальное значение – SIslam

+0

@SIslam: 'l.remove (max (l))' также работает ... –

ответ

3

Вы можете сделать это:

>>> numbers = [3, 5, 77, 8] 
>>> max_number = max(numbers) 
>>> numbers[:] = [number for number in numbers if number != max_number] 
>>> numbers 
[3, 5, 8] 

Удаление подразумевает, что вы хотите сохранить исходный объект. numbers[:] = делает это:

numbers = [3, 5, 77, 8] 
print(id(numbers)) 
max_number = max(numbers) 
numbers[:] = [number for number in numbers if number != max_number] 
print(id(numbers)) 

печатает:

4421673608 
4421673608 
4

Прежде всего, не используйте list в качестве имени переменной, вы затеняете имя встроенного list. Следующий код создаст новый список из списка lst, где будет удален каждый элемент, который является максимальным (помните, что может быть несколько таких элементов) удален и переназначить его на имя lst.

max_el = max(lst) 
lst = [x for x in lst if x != max_el] 

Если вы хотите удалить максимальный элемент только один раз (т.е. его первого вхождения), и сделать это на месте, ответ от @KevinGuan в комментариях работает отлично:

>>> lst = [1,2,3,1,3] 
>>> lst.remove(max(lst)) 
>>> lst 
[1, 2, 1, 3] 
+0

Спасибо, это то, что мне было нужно –

+0

Да еще одна опция может быть -фильтр (lambda x: x! = Max (lst), lst) ' – SIslam

+0

@SIslam ... лучше назначить' max (lst) ', вместо того, чтобы называть его значением для каждого значения' lst' –

2

Просто использование:

>>> l = [1, 2, 2, 3, 3] 
>>> m = max(l) 
>>> [i for i in l if i != m] 
[1, 2, 2] 
+0

Я добавил ваш подход из комментариев к моему ответу, надеюсь, вы не против. Если вы хотите добавить его к себе, я удалю его. – timgeb

+0

@timgeb: О, мой комментарий к вопросу. Нет проблем, это хорошо :) –

2
>>> mx = max(lst) 
>>> lst = list(filter(lambda x: x!=mx, lst)) #Python3, filter returns generator, so convert it to list 
Смежные вопросы