Ja, Sie können. Sie können durch die letzten drei Ziffern in jedem Teststring sortieren:
# 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']
Hier finden Sie die Elemente von l
trimmen wollen, wenn das für Sie wichtig ist, aber das wird für alle Test
s arbeiten, die in 3 Ziffern enden.
Wenn Sie nicht Test DATA_
möchten, können Sie dies tun:
# 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']
Wenn Ihre Daten wohlgeformt ist (das heißt, g
gefolgt von 3 Ziffern), wird dies ganz gut funktionieren. Ansonsten einen regulären Ausdruck aus einer der anderen geschrieben Antworten verwenden.
Eine weitere Alternative ist Strings in eine PriorityQueue
zu schieben, wie Sie sie lesen:
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()
Der Vorteil einer PQ ist, dass es sie in sortierter Reihenfolge hinzufügen wird , das entlastet die von Ihnen, und es wird in linearer Zeit getan.
example.txt
Test DATA_g004, Test DATA_g003, Test DATA_g001, Test DATA_g002
Und die Ausgabe:
13:25 $ python test.py
g001
g002
g003
g004
Die Sortierfunktion funktioniert einwandfrei. Allerdings habe ich Probleme beim Sortieren von "g001". Wie sortiere ich die Daten ohne die Zeichenkette "Test DATA_"? –
@Aurora_Titanium (x.replace ('TestData', '') für x in xs – Caridorc
@Aurora_Titanium Ich habe nach dem Schlüssel 'integers' am Ende nach' g_' sortiert – vks