2016-11-21 6 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:重複した数字は新しいに入るように、コードを変更:コードは

EDIT3読むためにダウン収縮と簡単です:ちょうど私が

EDIT2に今あるコードの第二の部分を忘れてしまった実現リストそれは、リスト項目の複数の量私はそれを反復しながら、それは今

+1

「これは何を期待していたのですか? – user2357112

+0

コードをデバッグすると、すぐに問題が見つかります。 – Maroun

+1

'a> b' - ' a'を '0'に、' b'を非負の数に設定します。 'a'はおそらく' b'よりも大きくなる可能性がありますか? – user2357112

答えて

0

あなたのケースでは、i=2のアカウントを作成した後でも、複数回存在するため、リストを2回再表示します。このため、2と3はlistsal3に2回になります。代わりに、あなたがしたいことは、それぞれのユニークなアイテムに対して一度だけリストを通過することです。

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] 

これは、元のリスト内の順序を保持します。

関連する問題