В списке имен (3 полных имени) мне нужно извлечь первые и средние инициалы с фамилией полностью и вернуть все это в виде строки ... Вот то, что я пробовал, но я продолжаю получать только одно имя, а не три, когда я повторяю ... Пожалуйста, помогите .. новичок в python, и это заставляет меня бункеры .. Мой код ниже:

def fancy_me(name_string):

    name = ', '.join(name_string)
    name_list = name.split()
    name_sublist = name_list[:3]
    name_sublist2 = name_list[3:6]
    name_sublist3 = name_list[-3:]
    new_namelist = [name_sublist, name_sublist2, name_sublist3]
    for x in new_namelist:
        new_list = []
        first = (x[0][0])
        mid = (x[1][0])
        last = (x[2])
    return first + ' .' + mid + '. ' + last

print(fancy_me(["First Middle Last", "David Andrew Joyner", "George P Burdell"]))

Мой вывод: G .P. Burdell

Желаемый результат: F. M. Last, D. A. Joyner, G. P. Burdell

0
PlumChy 10 Окт 2021 в 15:32

2 ответа

Лучший ответ

У вас есть пара проблем. Во-первых, вы присоединяетесь не в то время - вы хотите соединить запятую в конце, а не в начале. Это мешает разделению, которое вы делаете. Тогда похоже, что у вас неправильные ожидания того, как Python будет обрабатывать входные данные над вашим циклом. Он не будет автоматически перебирать входы.

Я бы выделил две разные функции следующим образом:

def initialize(name):
    first, middle, last = name.split()  # note this assumes all names will only be three parts

    return f"{first[0]}. {middle[0]}. {last}"

def fancy_me(namelist):
    return ", ".join(initialize(name) for name in namelist)
1
chthonicdaemon 10 Окт 2021 в 12:45

Если вы хотите исключить предположение в ответе @ chthonicdaemon, что все имена состоят из трех частей, вы можете адаптировать решение в следующим образом:

def initialize(name: str) -> str:
    parts = name.split()
    return ". ".join(part[0] for part in parts) + parts[-1][1:]

def fancy_me(namelist: list[str]) -> str:
    return ", ".join(initialize(name) for name in namelist)
0
Manfred 10 Окт 2021 в 12:54