mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-03-15 06:40:24 +01:00
Fix/sort names (#177)
* cosmetic fix in sort_names * bug fix, more tests
This commit is contained in:
parent
15d07de87f
commit
5155effbbf
2 changed files with 37 additions and 12 deletions
|
@ -18,30 +18,32 @@ def sort_names(ll):
|
||||||
sorted list
|
sorted list
|
||||||
"""
|
"""
|
||||||
if len(ll) > 1:
|
if len(ll) > 1:
|
||||||
|
sorted = False
|
||||||
r_pattern = r'r(\d+)'
|
r_pattern = r'r(\d+)'
|
||||||
id_pattern = r'id(\d+)'
|
id_pattern = r'id(\d+)'
|
||||||
|
|
||||||
# sort list by id first
|
# sort list by id first
|
||||||
if all([re.search(id_pattern, entry) for entry in ll]):
|
if all([re.search(id_pattern, entry) for entry in ll]):
|
||||||
ll.sort(key=lambda x: int(re.findall(id_pattern, x)[0]))
|
ll.sort(key=lambda x: int(re.findall(id_pattern, x)[0]))
|
||||||
|
sorted = True
|
||||||
# then by replikum
|
# then by replikum
|
||||||
if all([re.search(r_pattern, entry) for entry in ll]):
|
if all([re.search(r_pattern, entry) for entry in ll]):
|
||||||
ll.sort(key=lambda x: int(re.findall(r_pattern, x)[0]))
|
ll.sort(key=lambda x: int(re.findall(r_pattern, x)[0]))
|
||||||
|
sorted = True
|
||||||
# as the rearrangements by one key let the other key untouched, the list is sorted now
|
# as the rearrangements by one key let the other key untouched, the list is sorted now
|
||||||
|
|
||||||
else:
|
if not sorted:
|
||||||
# fallback
|
# fallback
|
||||||
sames = ''
|
sames = ''
|
||||||
if len(ll) > 1:
|
for i in range(len(ll[0])):
|
||||||
for i in range(len(ll[0])):
|
checking = ll[0][i]
|
||||||
checking = ll[0][i]
|
for rn in ll[1:]:
|
||||||
for rn in ll[1:]:
|
is_same = (rn[i] == checking)
|
||||||
is_same = (rn[i] == checking)
|
if is_same:
|
||||||
if is_same:
|
sames += checking
|
||||||
sames += checking
|
else:
|
||||||
else:
|
break
|
||||||
break
|
print("Using prefix:", sames)
|
||||||
print("Using prefix:", ll[0][len(sames):])
|
|
||||||
ll.sort(key=lambda x: int(re.findall(r'\d+', x[len(sames):])[0]))
|
ll.sort(key=lambda x: int(re.findall(r'\d+', x[len(sames):])[0]))
|
||||||
return ll
|
return ll
|
||||||
|
|
||||||
|
|
|
@ -6,4 +6,27 @@ def test_sort_names():
|
||||||
presorted_list = ['sfqcd_r1_id5', 'sfqcd_r2_id5', 'sfqcd_r2_id9', 'sfqcd_r7_id5', 'sfqcd_r10_id4', 'sfqcd_r10_id5']
|
presorted_list = ['sfqcd_r1_id5', 'sfqcd_r2_id5', 'sfqcd_r2_id9', 'sfqcd_r7_id5', 'sfqcd_r10_id4', 'sfqcd_r10_id5']
|
||||||
|
|
||||||
sorted_list = pe.input.utils.sort_names(my_list)
|
sorted_list = pe.input.utils.sort_names(my_list)
|
||||||
assert (all([sorted_list[i] == presorted_list[i] for i in range(len(sorted_list))]))
|
assert (all([sorted_list[i] == presorted_list[i] for i in range(len(sorted_list))]))
|
||||||
|
|
||||||
|
|
||||||
|
def test_sort_names_only_ids():
|
||||||
|
my_list = ['sfcf_T_id2', 'sfcf_T_id1', 'sfcf_T_id0', 'sfcf_T_id6', 'sfcf_T_id5']
|
||||||
|
presorted_list = ['sfcf_T_id0', 'sfcf_T_id1', 'sfcf_T_id2', 'sfcf_T_id5', 'sfcf_T_id6']
|
||||||
|
|
||||||
|
sorted_list = pe.input.utils.sort_names(my_list)
|
||||||
|
assert (all([sorted_list[i] == presorted_list[i] for i in range(len(sorted_list))]))
|
||||||
|
|
||||||
|
|
||||||
|
def test_sort_names_only_reps():
|
||||||
|
my_list = ['sfcf_T_r2', 'sfcf_T_r1', 'sfcf_T_r0', 'sfcf_T_r6', 'sfcf_T_r5']
|
||||||
|
presorted_list = ['sfcf_T_r0', 'sfcf_T_r1', 'sfcf_T_r2', 'sfcf_T_r5', 'sfcf_T_r6']
|
||||||
|
|
||||||
|
sorted_list = pe.input.utils.sort_names(my_list)
|
||||||
|
assert (all([sorted_list[i] == presorted_list[i] for i in range(len(sorted_list))]))
|
||||||
|
|
||||||
|
def test_sort_names_fallback():
|
||||||
|
my_list = ['xql2', 'xql1', 'xql0', 'xql6', 'xql5']
|
||||||
|
presorted_list = ['xql0', 'xql1', 'xql2', 'xql5', 'xql6']
|
||||||
|
|
||||||
|
sorted_list = pe.input.utils.sort_names(my_list)
|
||||||
|
assert (all([sorted_list[i] == presorted_list[i] for i in range(len(sorted_list))]))
|
||||||
|
|
Loading…
Add table
Reference in a new issue