按性别拆分姓名列表

2024-09-29 19:25:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码有问题。我必须创建一个函数,给定一个名称列表(男性和女性)创建两个新列表。你知道吗

一个是男性,另一个是女性。问题是这些都是波兰人的名字,所以女性的名字以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)) 

Tags: 函数代码name名称列表names结尾情况
3条回答

您可以使用循环中的一条语句来执行此操作:

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)
female_names = [i for i in names if i.endswith('a')]
females = []
males = []
for name in names:
    if name.endswith("a"):
        females.append(name)
    else:
        males.append(name)

相关问题 更多 >

    热门问题