Вы можете сделать это с помощью одного оператора в цикле:
names = sorted(["Andrzej", "Henryk", "Alicja", "Cezary", "Barbara"])
females, males = [], []
for name in names:
(females if name[-1] == "a" else males).append(name)
print(females) # -> ['Alicja', 'Barbara']
print(males) # -> ['Andrzej', 'Cezary', 'Henryk']
Вот еще одна возможность, которая все еще очень удобочитаема (если вы понимаете Python):
males = []
females = [name for name in names if name[-1] == "a" or males.append(name)]
Просто подумал о другом варианте, который (очень уместно) использует groupby
:
from itertools import groupby
names = sorted(["Andrzej", "Henryk", "Alicja", "Cezary", "Barbara"])
males, females = [], []
for sex, firstnames in groupby(names, lambda name: name[-1] == "a"):
[males, females][sex].extend(firstnames)