Computer >> Máy Tính >  >> Lập trình >> Python

Sắp xếp lại dữ liệu trong tệp nhật ký bằng Python

Giả sử chúng ta có một mảng các bản ghi. Trong mảng đó, mỗi mục nhập là một chuỗi từ được phân cách bằng dấu cách. Từ đầu tiên trong mỗi nhật ký là một định danh chữ và số. Sau đó, có các loại chuỗi khác nhau như bên dưới -

  1. Mỗi từ sau id sẽ chỉ bao gồm các chữ cái viết thường;
  2. Mỗi từ sau id sẽ chỉ bao gồm các chữ số.

Chúng tôi sẽ gọi hai loại nhật ký này lần lượt là nhật ký chữ cái và nhật ký chữ số. Và ti được đảm bảo rằng mỗi nhật ký có ít nhất một từ sau id của nó.

Chúng ta phải sắp xếp lại thứ tự các bản ghi sao cho tất cả các bản ghi chữ cái nằm trước bất kỳ bản ghi chữ số nào. Và các nhật ký chữ cái được sắp xếp theo thứ tự từ vựng bỏ qua mã định danh, với mã định danh được sử dụng trong trường hợp quan hệ. Cuối cùng, các bản ghi chữ số nên được đặt theo thứ tự ban đầu của chúng. Vì vậy, chúng tôi phải trả lại thứ tự cuối cùng của các bản ghi.

Vì vậy, nếu đầu vào giống như logs =["dig1 9 2 5 2", "let1 art can", "dig2 4 8", "let2 own kit dig", "let3 art zero"], thì đầu ra sẽ là [ "let1 art can", "let3 art zero", "let2 own kit dig", "dig1 9 2 52", "dig2 4 8"]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • words:=một danh sách mới
  • nums:=một danh sách mới
  • đối với mỗi nhật ký đăng nhập, hãy thực hiện
    • s:=danh sách các từ của nhật ký
    • nếu từ thứ hai là một chữ số, thì
      • chèn nhật ký vào cuối nums
    • nếu không,
      • nối từng phần tử của s bằng cách phân tách bằng dấu cách và chèn vào mảng từ ở cuối đoạn
    • words =Sau đó, sắp xếp các mảng từ vựng theo từ điển
  • words:=nối từng phần tử của mảng từ bằng cách phân tách bằng dấu cách và tạo danh sách các chuỗi
  • hợp nhất hai danh sách từ và số, sau đó trả về

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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

Đầu vào

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

Đầu ra

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