2016-07-05 23 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:1 2

+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())],您可以只使用,這是更Pythonic。

其次,第二條線的重要組成部分是set(i for i in a if a.count(i) > 1),這只是創建僅包含從a重複的新的列表(即[1, 2, 3, 2, 3]變得[2, 3, 2, 3],然後應用set給它,它轉換[2, 3, 2, 3]{2, 3}(這是一個set對象)。

如果你想知道什麼map(str, ...)是,它是如此,你可以打印每個元素的新set(如{2, 3}內)。

+0

我學習Python的一門課程,還沒有知道。但它看起來很好,很容易。不管怎樣,謝謝你。 – pookeeshtron

+0

@AntonL。我添加了一個解釋來幫助你理解所發生的一切:) – sidney

1

你可以使用內置庫collections來統計列表項並按照所需條件對其進行過濾。

import collections 

ints = map(int, input().split()) 
count = collections.Counter(ints) 
print filter(lambda x: count[x] > 1, count) 
相關問題