Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将全名拆分为两个变量,可能包含多个单词的姓氏_Python_Python 3.x_Split - Fatal编程技术网

Python将全名拆分为两个变量,可能包含多个单词的姓氏

Python将全名拆分为两个变量,可能包含多个单词的姓氏,python,python-3.x,split,Python,Python 3.x,Split,我有一个全名列表,我正在将其拆分为两个变量,目前如下所示: first, last = full_name.split(" ") 仅当拆分时全名为两个单词时,此选项才有效,否则我将得到。是否有一种简洁的方法来解释一个名称,其中包含更多的部分,将first保留为第一个单词,将last保留为其余单词?我可以多加一两行,但我想知道是否有一种优雅的方式。您可以使用: first, last = full_name.split(" ", 1) 研究的第二个参数是 如果全名可以是一个单词: name_a

我有一个全名列表,我正在将其拆分为两个变量,目前如下所示:

first, last = full_name.split(" ")
仅当拆分时
全名
为两个单词时,此选项才有效,否则我将得到。是否有一种简洁的方法来解释一个名称,其中包含更多的部分,将
first
保留为第一个单词,将
last
保留为其余单词?我可以多加一两行,但我想知道是否有一种优雅的方式。

您可以使用:

first, last = full_name.split(" ", 1)

研究的第二个参数是

如果
全名可以是一个单词:

name_arr = full_name.split(" ", 1)
first = name_arr[0]
last = name_arr[1] if len(name_arr) > 1 else ""

因为您使用的是Python 3,所以也可以使用

例如:

name = "John Jacob Jingleheimer Schmidt"
first, *last = name.split()
print("First = {first}".format(first=first))
#First = John
print("Last = {last}".format(last=" ".join(last)))
#Last = Jacob Jingleheimer Schmidt
这将在
last
中存储拆分字符串的第一个元素之后的所有内容。使用
“”。join(last)
将字符串重新组合在一起

如果只有两个元素需要解包,它也可以工作

name = "John Schmidt"
first, *last = name.split()
print("First = {first}".format(first=first))
#First = John
print("Last = {last}".format(last=" ".join(last)))
#Last = Schmidt
或者,如果您想要第一个、中间和最后一个:

name = "John Jacob Jingleheimer Schmidt"
first, middle, *last = name.split()
print("First = {first}".format(first=first))
#First = John
print("Middle = {middle}".format(middle=middle))
#Middle = Jacob
print("Last = {last}".format(last=" ".join(last)))
#Last = Jingleheimer Schmidt
您可以使用以下格式的三元组输出:

(分离器前的零件、分离器本身、分离器后的零件)

我会考虑使用图书馆。它使提取人名成为在公园里散步

从名称分析器导入人名
#这是一个全名,还有一个昵称
全名=‘林曼纽尔先生’老板‘米兰达’
#提取值
解析名称=人名(全名)
#只知道名字和姓氏
f_name=解析的_name.first
l_name=已解析的_name.last
打印(f_名称、l_名称)
#林曼努埃尔·米兰达
# ------------------------------
#如果您想查看所有内容:
解析的\u name.as\u dict()
{'title':'先生',
‘第一’:‘林曼努埃尔’,
“中间”:“,
“最后”:“米兰达”,
“后缀”:“,
“昵称”:“老板”}

如果
全名
由一个单词组成,这将不起作用。我添加了一个可能的解决方案来修复@brogrammer。谢谢你的提醒!您还可以使用来避免使用条件语句。@brogrammar我认为这是非常不同的(而且非常有用,因为许多Python开发人员似乎出于某种原因不知道
partition
),因此您应该编写一个单独的答案。噢,哇,谢谢@brogrammar。今天学到了新东西
str.partition
更适合这个问题。您能提供一些示例输入和输出吗?名字不能也是多字的吗?在现实生活中,我知道人们的名字是“Ellie Mae”。(没有人有这个特定的名字,因为我不是50年代的俄克拉何马州人,但你知道我的意思。)即使只有一个元素需要解包,它也能工作。用
“Cher”
试试,你会得到
Last=
,就像你可能希望的那样。话虽如此,我不确定是否有必要将姓氏重复拆分以将其重新连接在一起。此外,既然您在这里宣传Python的新特性,为什么不使用f字符串而不是显式
格式
?@abarnert感谢您的评论。我不是典型的python3用户,所以我对包括f-strings在内的所有新特性并不完全熟悉。如果您认为答案值得包含,请随意编辑。(TBH,我只是在本周开始使用<代码>格式> <代码>我来自C++背景,所以我对C风格字符串格式很满意。这绝对是最干净的答案。很好,但是最好用“代码>”A“B C”< /code >显示它自动解决OP问的问题。
name = "John Jacob Jingleheimer Schmidt"
first, middle, *last = name.split()
print("First = {first}".format(first=first))
#First = John
print("Middle = {middle}".format(middle=middle))
#Middle = Jacob
print("Last = {last}".format(last=" ".join(last)))
#Last = Jingleheimer Schmidt
>>> "a".partition(" ")
>>> ('a', '', '')

>>> "a b".partition(" ")
>>> ('a', ' ', 'b')

>>> "a b c".partition(" ")
>>> ('a', ' ', 'b c')