Python 연습 19:고급 목록 정렬

의문


  • 함수를 생성합니다.
  • 은 숫자 또는 문자열 목록을 가져옵니다.
  • 하위 목록에 저장된 원래 목록의 항목이 포함된 목록을 반환합니다.
  • 동일한 값의 항목은 동일한 하위 목록에 있어야 합니다.

  • 주어진 목록에서 각 요소가 처음 나타나는 순서대로 하위 목록이 반환되어야 합니다.

  • 예시




    advanced_sort([1,2,1,2]) -> [[1,1],[2,2]]
    advanced_sort([2,1,2,1]) ->  [[2,2],[1,1]]
    advanced_sort([3,2,1,3,2,1]) -> [[3,3],[2,2],[1,1]]
    advanced_sort([5,5,4,3,4,4]) ->  [[5,5],[4,4,4],[3]]
    advanced_sort([80,80,4,60,60,3])-> [[80,80],[4],[60,60],[3]]
    advanced_sort(['c','c','b','c','b',1,1])-> [['c','c','c'],['b','b'],[1,1]]
    advanced_sort([1234, 1235, 1234, 1235, 1236, 1235])-> [[1234, 1234],[1235, 1235, 1235],[1236]]
    advanced_sort(['1234', '1235', '1234', '1235', '1236', '1235'])-> [['1234', '1234'],['1235', '1235', '1235'],['1236']]
    


    내 솔루션


  • 알고리즘

  • >>separate the original list to different sublist
      initialist a empty list: new_list 
      add the first number of orginal list into new_list
      for each number in the original list:
        if number equals to the first element of any sublist:
            add number to that sublist
        else:
            add number to an new empty sublist
    
    
    


  • 코드

  • def advanced_sort(original_list: list) -> list:  
        # create a list with the first element of the original_list  
        new_list = [[original_list[0]]]  
        for index, item in enumerate(original_list):  
            if index == 0:  
                continue  
            not_added = True
            # To iterate over every sublist in the new_list
            for sublist_index, sublist in enumerate(new_list):  
                # try:  
                # if item is the same with first element of the sublist of new list and not already added            
                if item == sublist[0] and not_added:  
                    # add item to that sublist  
                    sublist.append(item)  
                    not_added = False  
                # if no same item appear after checking the whole new list and not already added  
                if item != sublist[0] and sublist_index == len(new_list) - 1 and not_added:  
                    # add the item the end of the new_list  
                    new_list.append([item])  
                    not_added = False  
        return new_list
    


    기타 솔루션




    def advanced_sort(lst):
        return [[i] * lst.count(i) for i in sorted(set(lst), key=lst.index)]
    


  • 알고리즘

  • >>transform the original list into a set, thus only unique item will appear
    >>rearrange the transformed set by the index order
    >>count how many time each unique appear in the original list
    >>form a new list by putting in each item times their occurance in a sublist
    


    내 반성


  • while 루프
  • 부울 조건이 false로 변경될 때 루프가 즉시 종료되지 않음
  • if 조건을 사용하여 코드 실행을 제어해야 함

  • 사람들이 우아하게 짧은 코드를 작성할 수 있다는 것에 감탄하기만 하면 됩니다

  • 신용 거래


  • 도전 edabit
  • 좋은 웹페이지 즐겨찾기