Разделить список имен по полу - PullRequest
1 голос
/ 04 апреля 2019

У меня проблема с моим кодом.Я должен создать функцию, которая с учетом списка имен (мужского и женского пола) создает два новых списка:

Один с мужским, а другой с женскими именами.Проблема в том, что это польские имена, поэтому женские имена заканчиваются на a.

Это то, что я имею до сих пор:

names = ["Andrzej", "Henryk", "Alicja", "Cezary", "Barbara"]
names.sort()

print(names)

def name_sorter(names):
    male =sorted(key=lambda x:x.split[-1])

print(name_sorter(names)) 

Ответы [ 8 ]

2 голосов
/ 04 апреля 2019

Вы можете сделать это с помощью одного оператора в цикле:

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)
2 голосов
/ 04 апреля 2019
females = []
males = []
for name in names:
    if name.endswith("a"):
        females.append(name)
    else:
        males.append(name)
1 голос
/ 04 апреля 2019

Использование str.endswith():

names = ["Andrzej", "Henryk", "Alicja", "Cezary", "Barbara"]

males = [m for m in names if not m.endswith('a')]  # ['Andrzej', 'Henryk', 'Cezary']
females = [f for f in names if f not in males]      # ['Alicja', 'Barbara']
1 голос
/ 04 апреля 2019

Вы можете использовать str.endswith():

names = ["Andrzej", "Henryk", "Alicja", "Cezary", "Barbara"]

males = []
females = []

for name in names:
    if name.endswith("a"):
        females.append(name)
    else:
        males.append(name)

print(males, females)

Выход:

['Andrzej', 'Henryk', 'Cezary'] ['Alicja', 'Barbara']
1 голос
/ 04 апреля 2019
names = ["Andrzej", "Henryk", "Alicja", "Cezary", "Barbara"]

females = [name for name in names if name[-1] == 'a']
males = [name for name in names if name not in females]
1 голос
/ 04 апреля 2019

Если у вас есть список names, то вы можете просто перебрать его и добавить мужчин в один список и женщин в другой:

names = ["Andrzej", "Henryk", "Alicja", "Cezary", "Barbara"]
males = []
females = []
for name in names:
    if name[-1] == 'a':
        females.append(name)
    else:
        males.append(name)

И затем вы можете отсортировать их, если хотите, как обычно:

females.sort()
males.sort()
1 голос
/ 04 апреля 2019
female_names = [i for i in names if i.endswith('a')]
0 голосов
/ 04 апреля 2019
names = ["Andrzej", "Henryk", "Alicja", "Cezary", "Barbara"]
for name in names:
    if name.endswith("a") == True:
        print("F")
    else:
        print("M")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...