Vâng, bạn có thể. Bạn có thể sắp xếp theo 3 chữ số cuối cùng trong mỗi chuỗi thử nghiệm:
# The string to be sorted by digits
s = "Test DATA_g004, Test DATA_g003, Test DATA_g001, Test DATA_g002"
# Create a list by splitting at commas, sort the last 3 characters of each element in the list as `ints`.
l = sorted(s.split(','), key = lambda x: int(x[-3:]))
print l
# [' Test DATA_g001', ' Test DATA_g002', ' Test DATA_g003', 'Test DATA_g004']
Bạn sẽ muốn để cắt các phần tử của l
nếu đó là quan trọng với bạn, nhưng điều này sẽ làm việc cho tất cả Test
s kết thúc bằng 3 chữ số.
Nếu bạn không muốn Test DATA_
, bạn có thể làm điều này:
# The string to be sorted by digits
s = "Test DATA_g004, Test DATA_g003, Test DATA_g001, Test DATA_g002"
# Create a list by taking the last 4 characters of sorted strings with key as last 3 characters of each element in the list as `int`s.
l = sorted((x[-4:] for x in s.split(',')), key = lambda x: int(x[-3:]))
print l
# ['g001', 'g002', 'g003', 'g004']
Nếu dữ liệu của bạn được tốt được hình thành (ví dụ: g
tiếp theo là 3 chữ số), điều này sẽ làm việc khá tốt. Nếu không, hãy sử dụng regex từ bất kỳ câu trả lời nào được đăng khác.
lựa chọn khác là để đẩy chuỗi thành một PriorityQueue
khi bạn đọc chúng:
test.py
from Queue import PriorityQueue
q = PriorityQueue()
with open("example.txt") as f:
# For each line in the file
for line in f:
# Create a list from the stripped, split-at-comma string
for s in line.strip().split(','):
# Push the last four characters of each element in the list into the pq
q.put(s[-4:])
while not q.empty():
print q.get()
Lợi ích của việc sử dụng một PQ là nó sẽ thêm chúng theo thứ tự sắp xếp , lấy gánh nặng của bạn, và nó được thực hiện trong thời gian tuyến tính.
example.txt
Test DATA_g004, Test DATA_g003, Test DATA_g001, Test DATA_g002
Và kết quả:
13:25 $ python test.py
g001
g002
g003
g004
Fucntion sắp xếp hoạt động tốt. Tuy nhiên tôi đang gặp rắc rối chỉ cần phân loại "g001" Về cơ bản làm thế nào để sắp xếp dữ liệu mà không có chuỗi "Test DATA_"? –
@Aurora_Titanium (x.replace ('TestData', '') cho x trong xs – Caridorc
@Aurora_Titanium tôi đã sắp xếp dựa trên khóa 'số nguyên' ở cuối sau' g_' – vks