Отсортировать элементы массива (буквы) в алфавитном порядке, независимо от их регистра
from itertools import product
gams_1=['AbCd', 'AbCD', 'Abcd', 'AbcD']
gams_2=['AbCD', 'AbCd']
f_0=list(product(gams_1,gams_2))
f_1=[]
for i in range(len(f_0)):
f_1.append(''.join(f_0[i]))
for i in range(len(f_1)):
f_1[i]=sorted(f_1[i].casefold())
print(f_1)
Этот код полностью рабочий, но при выводе результата буквы должны сохранить свой регистр, чего я реализовать не смог. При удалении метода .casefold() элементы выводятся в виде [['A', 'A', 'C', 'C', 'D', 'b', 'b', 'd'], ... ], то есть сортируются как в алфавитном порядке, так и по регистру. Сортировки по регистру нужно избежать, то есть должно выводиться [['A','A','b','b','C','C','d','D']] ... ].
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
В sorted можно передавать функцию key по которой будет выполняться сортировка.
Попробуйте:
f_2 = []
for sub_lst in f_0:
f_2.append(sorted(''.join(sub_lst), key=str.lower))
print(f_2)
# [['A', 'A', 'b', 'b', 'C', 'C', 'd', 'D'], ['A', 'A', 'b', 'b', 'C', 'C', 'd', 'd'], ...
В вашем случае, возможно, лучше указывать str.casefold вместо str.lower (это зависит от обрабатываемых строк)
PS.
В одну строку:
f_2 = [sorted(''.join(sub_lst), key=str.lower) for sub_lst in f_0]