2016-11-21 3 views
-3
listsal2 = [1,2,2,3,3,4,5,6,7,8] 
listsal3 = [] 

counter = 0 
for i in listsal2: 
    item = listsal2.count(i) 

    if item > 1: 
     counter = item 
     while counter > 1: 
      listsal3.append(i) 
      counter = counter - 1 




print (listsal3) 

Я работаю над функцией режима, но по какой-то причине он удерживает последние пары номеров в списке и больше элементов в списке, тем больше, удаляться.Python: предметы, не удаляемые из списка

EDIT: просто понял, что я забыл 2-ую часть кода, который сейчас находится в

EDIT2: код сморщенные вниз и легче читать

EDIT3: изменил код так, дублирующие номера идут в новый список, но он имеет несколько количеств элемента списка

Спасибо всем за помощь, я думаю, у меня сейчас

+1

'a = a' - что вы ожидали от этого? – user2357112

+0

Отлаживайте свой код, и вы сразу же найдете проблему. – Maroun

+1

'if a> b' - вы устанавливаете' a' в '0' и' b' на неотрицательное число. Как может 'a' быть больше, чем' b'? – user2357112

ответ

0

В вашем случае, даже после того, как вы учли i=2 один раз, вы снова просматриваете список на 2, так как он существует несколько раз. Вот почему 2 и 3 попадают в listsal3 дважды. Вместо этого то, что вы хотите сделать, - это только один раз в списке для каждого уникального элемента.

listsal2 = [1,2,2,3,3, 4] 
newlist = set(listsal2) 
listsal3 = [] 

counter = 0 
for i in newlist: 
    item = listsal2.count(i) 

    if item > 1: 
     counter = item 
     print counter 
     while counter > 1: 
      listsal3.append(i) 
      counter = counter - 1 

print listsal2, listsal3 

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

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

newset = set(listsal2) 
newlist = list(set) 
counts = [] 

for item in newlist: 
    counts.append(listsal2.count(item)) 
maxcount = max(counts) 
max_occurring_item = newlist[counts.index(maxcount)] 
-1

Вы изменяете список, пока перебор его. Это вообще не рекомендуется, потому что он прерывает итерацию.

Если вы собираетесь удалить все одиночные и повторяющиеся элементы, следующий код будет делать:

l = listsal2 
l = [v for i, v in enumerate(l) if l.count(v) > 1 and l.index(v) == i] 

Это сохраняет порядок в первоначальном списке.