2017-04-25 188 views
0

大小爲N的整數arr定義爲{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

你可以這樣做:

>>> 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]) 

>>> c_sort(li) 
[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