Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Sắp xếp lại dữ liệu trong Log Files trong Python


Giả sử ta có mảng log. Mỗi mục là chuỗi phân cách bằng khoảng trắng. Từ đầu tiên là định danh alphanumeric. Sau đó có hai loại chuỗi:

  1. Mỗi từ sau id chỉ chứa chữ thường;
  2. Mỗi từ sau id chỉ chứa chữ số.

Gọi hai loại log là letter-logs và digit-logs. Đảm bảo mỗi log có ít nhất một từ sau id.

Ta sắp xếp lại log sao cho tất cả letter-logs ở trước digit-log. Letter-logs sắp xếp theo thứ tự từ điển bỏ qua định danh, dùng định danh để giải quyết tie. Cuối cùng, digit-logs giữ thứ tự gốc. Trả về thứ tự cuối cùng.

Ví dụ, logs = ["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","dig2 4 8"]

Giải quyết:

  • words := list mới
  • nums := list mới
  • for log in logs, do
    • s := list từ của log
    • if từ thứ hai là chữ số, thêm log vào nums
    • ngược lại, nối các phần tử s bằng khoảng trắng thêm vào words
  • words := sắp xếp words theo thứ tự từ điển
  • words := nối các phần tử words bằng khoảng trắng thành list chuỗi
  • gộp words và nums, trả về

Xem triển khai:

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