Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 로그 파일의 데이터 재정렬

<시간/>

로그 배열이 있다고 가정합니다. 해당 배열에서 각 항목은 공백으로 구분된 단어 문자열입니다. 각 로그의 첫 번째 단어는 영숫자 식별자입니다. 그런 다음 아래와 같은 다양한 유형의 문자열이 있습니다 -

  1. id 뒤의 각 단어는 소문자로만 구성됩니다.
  2. id 뒤의 각 단어는 숫자로만 구성됩니다.

이 두 가지 유형의 로그를 각각 문자 로그 및 숫자 로그라고 합니다. 그리고 ti는 각 로그의 id 뒤에 적어도 하나의 단어가 있음을 보장합니다.

모든 문자 로그가 숫자 로그보다 먼저 유지되도록 로그를 재정렬해야 합니다. 그리고 편지 로그는 식별자를 무시하고 사전순으로 정렬되며 동점일 경우 식별자가 사용됩니다. 마지막으로 숫자 로그를 원래 순서대로 배치해야 합니다. 따라서 로그의 최종 순서를 반환해야 합니다.

따라서 입력이 logs =["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]와 같은 경우 출력은 [ "let1 art can","let3 art zero","let2 own kit dig","dig1 9 2 52","dig2 4 8"]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 단어 :=새 목록
  • nums :=새 목록
  • 로그에 로그인할 때마다 다음을 수행합니다.
    • :=로그의 단어 목록
    • 두 번째 단어가 숫자이면
      • 숫자 끝에 로그 삽입
    • 그렇지 않으면
      • 각 요소를 공백으로 구분하여 결합하고 끝에 단어 배열에 삽입
    • words =그런 다음 단어 배열을 사전순으로 정렬
  • words :=단어 배열의 각 요소를 공백으로 구분하여 결합하고 문자열 목록 만들기
  • 두 개의 목록 단어와 숫자를 병합한 다음 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class Solution:
   def reorderLogFiles(self, logs):
      words = []
      nums = []
      for log in logs:
         s = log.split()
         if s[1].isdigit():
            nums.append(log)
         else:
            words.append((s[0], ' '.join(s[1:])))
            words = sorted(words, key=lambda x: (x[1],x[0]))
            words = [' '.join(w) for w in words]
      return words + nums
ob = Solution()
print(ob.reorderLogFiles(["dig1 9 2 5 2","let1 art can","dig2 4
8","let2 own kit dig","let3 art zero"]))

입력

["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]

출력

['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 9 2 5 2', 'dig24 8']