для использования только вашего кода:
max_len = max(map(len, z))
for i in range(1, max_len + 1):
c = []
for j in z:
if len(j) == i:
c.append(j)
print(c)
вывод:
['A', 'B', 'C', 'D', 'A', 'B', 'C']
['AB', 'AB', 'BC', 'BC', 'CD', 'DA', 'AB', 'BC']
['ABC', 'ABC', 'ABC', 'BCD', 'CDA', 'DAB', 'ABC']
['ABCD', 'BCDA', 'CDAB', 'DABC']
['ABCDA', 'BCDAB', 'CDABC']
['ABCDAB', 'BCDABC']
['ABCDABC']
для получения ожидаемого результата вы можете использовать collections.defaultdict
:
from collections import defaultdict
d = defaultdict(list)
for s in z:
d[len(s)].append(s)
c = list(d.values())
c
output:
[['A', 'B', 'C', 'D', 'A', 'B', 'C'],
['AB', 'AB', 'BC', 'BC', 'CD', 'DA', 'AB', 'BC'],
['ABC', 'ABC', 'ABC', 'BCD', 'CDA', 'DAB', 'ABC'],
['ABCD', 'BCDA', 'CDAB', 'DABC'],
['ABCDA', 'BCDAB', 'CDABC'],
['ABCDAB', 'BCDABC'],
['ABCDABC']]
вы создаете словарь, где ключ - это длина вашей текущей строки, а каждое значение - это список со всеми строками одинаковой длины, чтобы получить ожидаемый результат, который вы получают только значения dict