- This is assuming both lists are originally co-ordered.
You could use the function zip
in order to "glue" the two lists together, than sort this new list according to the elements of list1
, and then separate them back. More easy to show:
list1=['River (OTH)','River (N)','River']
list2=['River (OTH) sales','River (N) sales','River sales']
zip_list = list(zip(list1, list2))
# zip_list = [('River (OTH)', 'River (OTH) sales'), ('River (N)', 'River (N) sales'), ('River', 'River sales')]
zip_list.sort(key=lambda elem: elem[0])
# zip_list = [('River', 'River sales'), ('River (N)', 'River (N) sales'), ('River (OTH)', 'River (OTH) sales')]
sorted_list1 = [elem[0] for elem in zip_list]
# sorted_list1 = ['River', 'River (N)', 'River (OTH)']
sorted_list2 = [elem[1] for elem in zip_list]
# sorted_list2 = ['River sales', 'River (N) sales', 'River (OTH) sales']
- Note that you can get the separated lists back more efficiently according to this answer. (
sorted_list1, sorted_list2 = [list(t) for t in zip(*zip_list)]
)
In case you want it reversed, simply add reverse=True
to the sort()
call.
Another interesting solution could be using enumerate
to "remember" the changes occured by indices:
indexed_list1 = list(enumerate(list1))
# [(0, 'River (OTH)'), (1, 'River (N)'), (2, 'River')]
indexed_list1.sort(key=lambda x: x[1])
# [(2, 'River'), (1, 'River (N)'), (0, 'River (OTH)')]
indices, sorted_list1 = (list(l) for l in zip(*indexed_list1))
# sorted_list1 = ['River', 'River (N)', 'River (OTH)']
# indices = [2, 1, 0]
sorted_list2 = [list2[i] for i in indices]
# ['River sales', 'River (N) sales', 'River (OTH) sales']
- If the lists are not co-ordered, but the only distinction is the
sales
word (or any other word for that matter) in the end, you could simply do:
import re
list2.sort(key=lambda s: re.sub("\s*sales$", "", s))
# list2 = ['River sales', 'River (N) sales', 'River (OTH) sales']
This will sort the list while ignoring the ending word sales
. I used regex to allow any number of spaces. The use of rstrip
might change other parts of the string.
- Otherwise, this is too specific and requires a specific solution