2016-07-05 6 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=' ') 

4番目の文字列でオンになっているときに変更を試みましたが、最後の番号がリストに残りました。

サンプル入力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())]の代わりに、ちょうど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

私はコースでPythonを学習しており、まだそれを知らない。しかし、それはかなり上質で簡単です。とにかくありがとうございました。 – 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)