2016-11-21 2 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) 

항목을 목록에서 제거되지 않고 있지만 어떤 이유로 그것을하지 않습니다 더 그 목록에서 지난 몇 번호와 목록에서 더 많은 항목을 유지 제거됩니다.파이썬 : 나는 모드 기능에서 일한지

편집 : 중복되는 번호가 새로 갈 수 있도록 코드를 변경 : 코드

EDIT3 읽고 아래로 수축 된 쉽게됩니다 : 그냥

EDIT2에 지금 코드의 두 번째 부분을 잊었다 실현 목록 있지만 목록 항목의 여러 양의 도움에 대한 모든

덕분에 내가 그것을 반복하면서 지금

+1

'무엇을 기대 했습니까? – user2357112

+0

코드를 디버그하면 즉시 문제가 발견됩니다. – Maroun

+1

'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] 

이 원래 목록의 순서를 유지합니다.