2017-04-25 11 views
0

サイズNの整数の配列arrは、{a、a、。 。 。 、a}。パラメータとしてarrを使用し、周波数の昇順に要素をソートし、ソートされた配列の各要素を新しい出力行として出力する必要があります。 2つ以上の要素が同じ頻度を持つ場合、この要素のサブセットは降順でソートする必要があります。 配列のカスタム並べ替え

Sample Input 0 53124 
Sample Output 0 1342 

は、私は私の学習運動としてJavaとPythonで、この問題を解決しようとしていると私はJavaでこの作業を得たが、私はPythonで、それをどのように処理するかわかりません。

public class CustomSort { 
    public static void main(String[] args) { 
     int[] arr = { 5, 3, 1, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 5, 4 }; 
     customSort(arr); 
    } 

    static void customSort(int[] arr) { 
     Map<Integer, Integer> map = new HashMap<>(); 
     List<Integer> numbers = new ArrayList<>(); 

     for (int i : arr) { 
      if(map.containsKey(i)) { 
       map.put(i, map.get(i) + 1); 
      } else { 
       map.put(i, 1); 
      } 


      if (!numbers.contains(i)) { 
       numbers.add(i); 
      } 
     } 

     Collections.sort(numbers); 

     List<Integer> returning = new ArrayList<>(numbers); 
     int count = 1; 
     while(!returning.isEmpty()) { 
      returning = print(returning, map, count); 
      count++; 
     } 

    } 

    static List<Integer> print(List<Integer> numbers, Map<Integer, Integer> map, int howManyItens) { 
     List<Integer> returning = new ArrayList<>(); 

     for (Integer integer : numbers) { 
      if(map.get(integer) == howManyItens) { 
       for (int i = 1; i <= howManyItens; i++) { 
        System.out.println(integer); 
       } 
      } else { 
       returning.add(integer); 
      } 
     } 

     return returning; 
    } 
} 

これはPythonでどうすればよいですか?

def customSort(arr): 
    # what should I do here? 
+3

あなたはhaviです悩んでいる? –

+0

あなたがこの質問とあなたのコメントを既存の回答に提出した方法で判断すると、基本的なPythonチュートリアルから始める必要があります.SOはそのための適切な場所ではありません。 –

+0

*#ここで何をすればいいですか?*、おそらくいくつかのコードを書いてください。より多くの質問をする前に、[どうすれば良い質問をしますか?](http://stackoverflow.com/help/how-to-ask)をお読みください。 –

答えて

1

あなたのような何かを行うことができます:あなたは、各要素の値の二次ソート・キーを使用する場合は、タプルを形成

def c_sort(li): 
    cnt={i:li.count(i) for i in set(li)} 
    return sorted(li, key=lambda e: cnt[e]) 

>>> c_sort(li) 
[3, 1, 4, 5, 5, 6, 6, 6, 6, 6, 2, 2, 2, 2, 2, 2, 2] 

:あなたが行うことができます

>>> li=[ 5, 3, 1, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 5, 4 ] 
>>> sorted(li, key=lambda i: li.count(i)) 
[3, 1, 4, 5, 5, 6, 6, 6, 6, 6, 2, 2, 2, 2, 2, 2, 2] 

かを、 :

def c_sort(li): 
    cnt={i:li.count(i) for i in set(li)} 
    return sorted(li, key=lambda e: (cnt[e], e)) 

>>> c_sort(li) 
[1, 3, 4, 5, 5, 6, 6, 6, 6, 6, 2, 2, 2, 2, 2, 2, 2] 
+0

これを対話モードで実行するのではなく、私のcustomSort関数でも使用できますか?私は.pyファイルとして実行したい。 – john

+1

はい、これは.pyファイルで使用できます。運が良かった! – dawg

+0

質問してもよろしいですか? – dawg