Разделение имени человека на имя и фамилию

хорошо, в основном я задаю вопрос об их имени Я хочу, чтобы это был один ввод, а не Имя и Фамилия.

Есть ли способ разделить это имя? и взяв только последнее слово из "Приговора", например

name = "Thomas Winter"
print name.split() 

и что бы на выходе было просто "Зима"

Вот обязательная статья "Что должен знать каждый программист": kalzumeus.com/2010/06/17/…

tripleee 19.09.2018 13:36

См. Также stackoverflow.com/questions/1122328/…

Raedwald 01.10.2019 13:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
23
2
47 094
16

Ответы 16

Нравится:

print name.split()[-1]

print name.split () [- 1] обратите внимание на ()

Jake 04.11.2008 03:45

Извиняюсь. Я немного поврежден Рубином.

JesperE 04.11.2008 14:18

Вероятно, вы захотите использовать для этого rsplit:

rsplit([sep [,maxsplit]])

Вернуть список слов в строке, используя sep в качестве строки-разделителя. Если указан maxsplit, выполняется самое большее разбиение maxsplit, самые правые. Если не указан sep или None, любая строка с пробелами является разделителем. За исключением разделения справа, rsplit() ведет себя как split(), который подробно описан ниже. Новое в версии 2.4.

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

Я бы порекомендовал вам спрашивать имена отдельно, если это вообще возможно.

Согласны, а как насчет, скажем, Майка Сент-Джеймса, например? Будет возвращена неправильная фамилия.

Fry 03.11.2008 22:27

Энн Мари ван Гвидо. Где заканчивается имя и начинается фамилия ?! Человечество!

Tom Ritter 03.11.2008 22:29

Не говоря уже о культурах, где фамилия дается первой. Спрашивать имя сразу - это нормально, только если вы всегда относитесь к нему как к единой единице. Попытка разделить его обычно приводит к искажению некоторых случаев.

Brian 03.11.2008 22:43

Некоторые имена также имеют апостроф или другие специальные символы, которые вызывают проблемы при неправильной обработке. Многие ирландские имена, например О'Коннор, попади в эту категорию.

Ryan 03.11.2008 23:26

Как человек, у которого несколько фамилий, я получаю удовольствие от этих ответов ... ;-)

cethegeek 01.11.2009 06:02

@Ryan: или у них нет апострофа, например "Gearóid Ó Súilleabháin" ... для которого у вас может быть дублированная запись в базе данных, хранящаяся под "Джерардом О'Салливаном" :-)

John Machin 01.11.2009 13:00

Разделить имена сложнее, чем кажется. Некоторые имена имеют двухсловные фамилии; некоторые люди будут вводить имя, отчество и фамилию; у некоторых имен есть два рабочих имени. Более надежный (или наименее ненадежный) способ обработки имен - всегда записывать имя и фамилию в отдельные поля. Конечно, это поднимает свои собственные проблемы, например, как обращаться с людьми с одним именем, чтобы убедиться, что это работает для пользователей, у которых другой порядок частей имени.

Имена жесткие, обращайтесь осторожно.

Вот как это сделать в SQL. Но нормализация данных с помощью такого рода вещей действительно медвежья. Я согласен с Дэйвом ДюПлантисом в отношении запроса отдельных материалов.

Вы обнаружите, что ваша ключевая проблема с этим подходом не техническая, а человеческая: разные люди пишут свои имена по-разному.

Фактически, терминология «имя» и «фамилия» сама по себе ошибочна.

В то время как многие смешанные семьи используют фамилию через дефис, например, Смит-Джонс, есть некоторые, которые просто используют оба имени по отдельности, «Смит Джонс», где оба имени являются фамилией.

Многие европейские фамилии состоят из нескольких частей, таких как «де Вер» и «ван ден Нейулаар». Иногда у этих статистов есть важная семейная история - например, префикс, присвоенный королем сотни лет назад.

Дополнительная проблема: я правильно написал их для людей, на которых я ссылаюсь - «de» и «van den» не получают заглавные буквы для некоторых семей, но имеют для других.

И наоборот, во многих азиатских культурах фамилия ставится на первое место, потому что семья считается более важной, чем личность.

Последний пункт - некоторые люди придают большое значение тому, чтобы быть "младшим", "старшим" или "третьим" - и ваш код не должен рассматривать их как фамилию.

Также отмечая, что довольно много людей используют имя, которое не принадлежит их родителям, я с некоторым успехом использовал следующую схему:

Полное имя (как обычно пишется для адресации почты); Фамилия; Известный как (имя, обычно используемое в разговоре).

например:

Полное имя: Уильям Гейтс III; Фамилия: Гейтс; Известный как: Билл

Полное имя: Сунг Ли; Фамилия: Сун; Известная как: Лиза

+1. Для приложений у меня обычно есть поля «полное имя» и «ник», которые заполняются независимо. У меня не было варианта использования «фамилии», но YMMV.

erickson 03.11.2008 23:28

+1 - ПОЖАЛУЙСТА, не забывайте, что те из нас, кого благословили наши родители, могут использовать имя, отличное от нашего имени - например, J. Эдгар Гувер ». Юридическое название (и CC, в большинстве случаев) требует 'J. Эдгар Гувер »; Случайный / Псевдоним / Известный - как бы «Эдгар Гувер». Имя, ИМ, Фамилия не годятся.

Ken Gentle 04.11.2008 00:02

А у некоторых людей нет «фамилии» или «фамилии», например в некоторых восточноафриканских культурах они используют имя отца и имя деда, например Том Дик Гарри. В некоторых случаях фамилия находится посередине, например. Энсон Мария Элизабет Чан Фонг Онсанг. См. Также статьи Википедии «Исландское имя», «Арабское имя» и «Имена в Российской Империи, Советском Союзе и странах СНГ».

John Machin 01.11.2009 14:13

Отличное написание. Спасибо. Я думаю, что сообщение @xeolot о python-nameparser отлично подходит для всего, что вы упомянули.

dlink 16.02.2018 00:10

Я бы указал стандартный формат (некоторые формы их используют), например «Пожалуйста, напишите свое имя в форме Имя Фамилия».

Так вам будет проще, так как в именах обычно нет запятой. Он также проверяет, действительно ли ваши пользователи вводят имя и фамилию.

Золотое правило данных - не собирайте данные слишком рано - гораздо проще склеить поля, чем разделить их. У большинства людей также есть отчество, которое должно быть необязательным полем. У некоторых людей множество отчества. У некоторых есть только одно имя, одно слово. В некоторых культурах обычно есть словарь отчества, который отдает дань уважения генеалогическому древу, восходящему к приземлению Ковчега Голгафринчама.

Здесь вам не нужно кодовое решение - вам нужно бизнес-правило.

Простой способ сделать именно то, что вы просили в python, -

name = "Thomas Winter"
LastName = name.split()[1]

(обратите внимание на скобки при разделении вызова функции.)

split () создает список, в котором каждый элемент взят из исходной строки, разделенный пробелами. Теперь вы можете захватить второй элемент с помощью name.split () [1] или последний элемент с помощью name.split () [- 1]

Однако, как говорили другие, если вы не УВЕРЕНЫ, что получаете строку типа «First_Name Last_Name», возникает гораздо больше проблем.

Если вы ищете только FirstName, это: FirstName = name.split () [0] - Но это то, что я искал (за исключением любого второго имени :)). Спасибо!

hiquetj 23.03.2018 02:48

Поскольку существует так много разных вариантов того, как люди пишут свои имена, вот как базовый способ получить имя / фамилию с помощью регулярного выражения.

import re
p = re.compile(r'^(\s+)?(Mr(\.)?|Mrs(\.)?)?(?P<FIRST_NAME>.+)(\s+)(?P<LAST_NAME>.+)$', re.IGNORECASE)
m = p.match('Mr. Dingo Bat')
if (m != None):
  first_name = m.group('FIRST_NAME')
  last_name = m.group('LAST_NAME')

Этот код самый короткий и удобный для случайного использования. Я использую его с Firebase, потому что API Firebase дает мне только полное имя. Одна проблема в том, что он не поддерживает LAST, FIRST. С этим легко справиться, проверив запятую перед применением. Если есть запятая, просто переверните регулярное выражение.

John Pang 03.09.2018 12:28

Если вы пытаетесь разобрать человеческое имя в PHP, я рекомендую Скрипт nameparse.php Кейта Бекмана.

И даже если вы не используете PHP, просмотр кода очень поучителен.

divegeek 01.11.2009 06:12

Это довольно старая проблема, но я обнаружил, что она ищет решение для разбора частей из общего имени.

http://code.google.com/p/python-nameparser/

Он очень ориентирован на США (например, названия, кажется, охватывают практически все звания в вооруженных силах США), а код использования заглавных букв порождает обычные глупости, такие как MacE, MacK и MacHin :-(

John Machin 19.05.2010 08:02

Я думаю, что это отличная библиотека Python, которая полностью решает все проблемы, перечисленные @bevan в его сообщении. Согласен с комментариями JohnMachin о том, что он ориентирован на США, однако это нормально для моего варианта использования. Я начал писать более простую версию python-nameparser, прежде чем прочитал ваш пост. Спасибо.

dlink 16.02.2018 00:09

Это определенно более сложная задача, чем кажется на первый взгляд. Я написал некоторые задачи, а также свой алгоритм их решения в своем блоге. Обязательно ознакомьтесь с моим проектом Google Code, если вам нужна последняя версия на PHP:

http://www.onlineaspect.com/2009/08/17/splitting-names/

Вот как я это делаю в своем приложении:

def get_first_name(fullname):
    firstname = ''
    try:
        firstname = fullname.split()[0] 
    except Exception as e:
        print str(e)
    return firstname

def get_last_name(fullname):
    lastname = ''
    try:
        index=0
        for part in fullname.split():
            if index > 0:
                if index > 1:
                    lastname += ' ' 
                lastname +=  part
            index += 1
    except Exception as e:
            print str(e)
    return lastname

def get_last_word(string):
    return string.split()[-1]

print get_first_name('Jim Van Loon')
print get_last_name('Jim Van Loon')
print get_last_word('Jim Van Loon')

Привет. Спасибо за код. Наблюдение: вы можете избавиться от необходимости устанавливать индекс с помощью enumerate - для индекса, части в enumerate (fullname.split ()). Также вы можете избавиться от необходимости использовать условное выражение вокруг + = '', используя join. lastname = '' .join (фамилии)

dlink 15.02.2018 23:56
return " ".join(fullname.split()[1:]) вместо всего, что есть в try...except.
Vedran Šego 26.02.2018 00:58
name = "Thomas Winter"
first, last = name.split()
print("First = {first}".format(first=first))
#First = Thomas
print("Last = {last}".format(last = " ".join(last)))
#Last = Winter

Здесь есть некоторые проблемы. Вы используете join() со строкой в ​​качестве аргумента, поэтому в этом примере вы должны напечатать W i n t e r. Другая проблема заключается в том, что код не работает, если у вас есть 3 слова или более в переменной name. Я предполагаю, что вы забыли добавить * в свой распакованный файл, например: first, *last = name.split(), чтобы исправить все проблемы.

Danilo Akamine 01.07.2020 18:00

Для этого можно использовать str.find().

x=input("enter your name ")
l=x.find(" ")
print("your first name is",x[:l])
print("your last name is",x[l:])

Из отзыва: Добавьте описание к своему ответу, а также отформатируйте его должным образом. См .: ОТВЕЧАТЬ

sɐunıɔןɐqɐp 10.12.2019 20:34

Другие вопросы по теме