给定一个有名字的列表,如何打印出这些名字,其中第一个名字是相同的?

2024-04-18 00:38:02 发布

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

我正在尝试编写一个函数,在这个函数中,给定的名称(通常只是名字、姓氏)和函数收集具有相同名字的名称。到目前为止,我已经知道了,但我不知道最后如何取回全名

def same_first_name(people):
  for i in range(len(people)):
    b=people[i].split()
    print(b)
  if b[0] == b[0]:
    

例如:

same_first_name(["Anna Smith", "Barbara Wia", "Anna Brien"]) 

返回

["Anna Smith",  "Anna Brien"]

Tags: 函数namein名称fordefrange名字
2条回答

我不是100%清楚您想要实现什么,但是这里有一个函数,它接受一个名字列表,并生成一个字典,其中键是名字,值是以键为名字的人的姓氏列表:

def same_first_name(people):
    split_names = [p.split() for p in people]
    first_names_set = set(p[0] for p in split_names)
    first_names_dict = {
        first_name: [p[1] for p in split_names if p[0] == first_name]
        for first_name in first_names_set
    }
    return first_names_dict

people = ["John Smith", "John Rogers", "Jack Jones", "Jack Smith", "Bill Bong"]

print(same_first_name(people))

控制台输出:

{'Jack': ['Jones', 'Smith'], 'Bill': ['Bong'], 'John': ['Smith', 'Rogers']}

根据您评论中的说明,下面是一个列表,其中添加了与列表中至少一个其他人同名的每个人:

def same_first_name(people):
    split_names = [p.split() for p in people]
    first_names_list = [p[0] for p in split_names]
    first_names_set = set(first_names_list)
    first_name_counts_dict = {
        first_name: first_names_list.count(first_name)
        for first_name in first_names_set
    }
    duplicated_first_names = [
        p for p in people if first_name_counts_dict[p.split()[0]] >= 2
    ]
    return duplicated_first_names

people = ["John Smith", "John Rogers", "Jack Jones", "Jack Smith", "Bill Bong"]

print(same_first_name(people))

控制台输出:

['John Smith', 'John Rogers', 'Jack Jones', 'Jack Smith']

相关问题 更多 >

    热门问题