2016-07-05 2 views
0

내 코드는 숫자 목록을 받아서 한 번 이상 반복되는 숫자 만 화면에 출력합니다. 왜 그런지는 모르겠지만 목록의 중간에있는 번호는 작동하지 않습니다. 내 코드 :마지막 단일 개체가 아닌 삭제할 수 없습니다

a = [int(i) for i in (input().split())] 
a.sort() 
for number in a: 
    if a.count(number)==1: 
     a.remove(number) 
    else: 
     a.remove(a.count(number)-a.count(number)+number) 
for number in a: 
    print(number, end=' ') 

네 번째 문자열에서는 켜기는했지만 마지막 숫자는 목록에 남아 있습니다. 이 작동해야 같은

샘플 입력 1 : 4 8 0 3 4 2 0 3 출력 예제 1 : 0 3 4

샘플 입력 2 10 샘플 출력 2 :

샘플 입력 3 : 1 개 1 2 2 3 3 샘플 출력 3 : 1 2 3

샘플 입력 4 : 1 개 1 1 1 1 2 2 2 샘플 출력 4 : 당신이 접근 할 수있는 일이

+3

a.count (number) -a.count (number) + number' = 'number', 맞습니까? 이 작업을 위해'collections.Counter'를 사용해야합니다. – qvpham

답변

1

이 문제 대신 set를 사용하여 :

a = list(map(int, input().split())) 
print(" ".join(map(str, set(i for i in a if a.count(i) > 1)))) 

설명 : map 기능을 읽어해야처럼

첫째, 그것은 보인다. a = [int(i) for i in (input().split())] 대신 list(map(int, input().split()))을 사용하면 훨씬 더 Pythonic입니다.

번째, 두 번째 행의 중요한 부분은 a에서만 중복을 포함하는 새로운리스트를 생성 set(i for i in a if a.count(i) > 1) (즉 [1, 2, 3, 2, 3][2, 3, 2, 3]되고 나서 set이다 {2, 3}[2, 3, 2, 3]을 (변환 그것에 set 적용이며 객체). 경우

당신이 map(str, ...)은 당신이) 새 set (예 : {2, 3} 내부의 각 요소를 인쇄 할 수 있도록이다 위해 무엇인지 궁금.

+0

코스에서 파이썬을 배우는 중이며 아직 알려지지 않았습니다. 그러나 그것은 꽤 멋지고 쉽게 보인다. 어쨌든 고맙습니다. – pookeeshtron

+0

@AntonL. 내가하는 일을 모두 이해할 수 있도록 설명을 추가했습니다. :) – sidney

1

당신이 할 수있는 내장 된 lib collections을 사용하여 목록 항목을 계산하고 필요한 조건으로 필터링하십시오.

import collections 

ints = map(int, input().split()) 
count = collections.Counter(ints) 
print filter(lambda x: count[x] > 1, count) 
관련 문제