DOS
DOS

Reputation: 13

Sort list of strings

I have a list of strings like this:

l = ['car58=C:/Files/SB.car58- 094.38.JPG',
     'bike53=C:/Files/SB.bike53- 006.33.JPG',
     'car46=C:/Files/SB.car46- 88.22.JPG',
     'bike12=C:/Files/SB.bike12- 006.33.JPG',
     'acc9=C:/Files/SB.acc9- 006.33.JPG']

I'm trying to sort the list using the start (position 0) of each string up to the "=" character ignoring all characters after it, so that the outcome is:

s = ['acc9=C:/Files/SB.acc9- 116.95.JPG',
     'bike12=C:/Files/SB.bike12- 006.33.JPG',
     'bike53=C:/Files/SB.bike53- 002.12.JPG',
     'car46=C:/Files/SB.car46- 88.22.JPG',
     'car58=C:/Files/SB.car58- 094.38.JPG']

Edit: The answer provided by Ajax1234 solved my issue:

s = sorted(l, key=lambda x:x[:x.index('=')])

Upvotes: 1

Views: 101

Answers (2)

Elis Byberi
Elis Byberi

Reputation: 1452

To sort a list use list's method sort():

l = ['car58=C:/Files/SB.car58- 094.38.JPG',
     'bike53=C:/Files/SB.bike53- 006.33.JPG',
     'car46=C:/Files/SB.car46- 88.22.JPG',
     'bike12=C:/Files/SB.bike12- 006.33.JPG',
     'acc9=C:/Files/SB.acc9- 006.33.JPG']

# sort list in place
l.sort()

print('\n'.join(l))

will print:

acc9=C:/Files/SB.acc9- 006.33.JPG
bike12=C:/Files/SB.bike12- 006.33.JPG
bike53=C:/Files/SB.bike53- 006.33.JPG
car46=C:/Files/SB.car46- 88.22.JPG
car58=C:/Files/SB.car58- 094.38.JPG

Upvotes: 0

Ajax1234
Ajax1234

Reputation: 71451

You can use .index():

s = [['car58=C:/Files/SB.car58- 094.38.JPG'],
['bike53=C:/Files/SB.bike53- 006.33.JPG'],
['car46=C:/Files/SB.car46- 88.22.JPG'],
['bike12=C:/Files/SB.bike12- 006.33.JPG'],
['acc9=C:/Files/SB.acc9- 006.33.JPG']]
new_s = sorted(s, key=lambda x:x[0][:x[0].index('=')])

Output:

[['acc9=C:/Files/SB.acc9- 006.33.JPG'], ['bike12=C:/Files/SB.bike12- 006.33.JPG'], ['bike53=C:/Files/SB.bike53- 006.33.JPG'], ['car46=C:/Files/SB.car46- 88.22.JPG'], ['car58=C:/Files/SB.car58- 094.38.JPG']]

Edit: list.sort() will also produce the desired output:

s.sort()
print(s)

Output:

[['acc9=C:/Files/SB.acc9- 006.33.JPG'], ['bike12=C:/Files/SB.bike12- 006.33.JPG'], ['bike53=C:/Files/SB.bike53- 006.33.JPG'], ['car46=C:/Files/SB.car46- 88.22.JPG'], ['car58=C:/Files/SB.car58- 094.38.JPG']]

Regarding your recent comment, this should work:

s = ['car58=C:/Files/SB.car58- 094.38.JPG', 'bike53=C:/Files/SB.bike53- 006.33.JPG', 'car46=C:/Files/SB.car46- 88.22.JPG', 'bike12=C:/Files/SB.bike12- 006.33.JPG', 'acc9=C:/Files/SB.acc9- 006.33.JPG']
new_s = sorted(s, key=lambda x:x[:x.index('=')])

Output:

['acc9=C:/Files/SB.acc9- 006.33.JPG', 'bike12=C:/Files/SB.bike12- 006.33.JPG', 'bike53=C:/Files/SB.bike53- 006.33.JPG', 'car46=C:/Files/SB.car46- 88.22.JPG', 'car58=C:/Files/SB.car58- 094.38.JPG']

Upvotes: 1

Related Questions