【问题标题】:Splitting a string of names拆分一串名字
【发布时间】:2016-03-16 23:52:36
【问题描述】:

我正在尝试编写一个程序,要求用户输入多个名称,并用分号分隔。名称将输入为姓氏,名字。然后,该程序将在单独的行上以 firstname lastname 格式打印每个名称。到目前为止,我的程序是:

def main():

    names=input("Please enter your list of names: ")
    person=names.split(";")
    xname=person.split(",")

这是据我所知,因为当我尝试用逗号分割时出错。我究竟做错了什么?输出应如下所示:

Please enter your list of names:  Falcon, Claudio; Ford, Eric; Owen, Megan; Rogers, Josh; St. John, Katherine

You entered:

Claudio Falcon

Eric Ford

Megan Owen

Josh Rogers

Katherine St. John

【问题讨论】:

  • 显示回溯 - 将其剪切并粘贴到您的问题以及您输入的内容中
  • 如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到您满意的解决,并为帮助您的人提供帮助。 See here 以获得完整的解释。

标签: python string split


【解决方案1】:

.split 是一个返回字符串列表的字符串方法。因此,它可以很好地拆分原始名称字符串,但您不能在结果列表中调用它(list 没有 .split 方法,这真的没有意义)。所以你需要在列表中的每个字符串上调用.split。为了整洁,您应该清理名称上的任何前导或尾随空格。像这样:

names = "Falcon, Claudio; Ford, Eric; Owen, Megan; Rogers, Josh; St. John, Katherine"
for name in names.split(';'):
    last, first = name.split(',')
    print(first.strip(), last.strip())

输出

Claudio Falcon
Eric Ford
Megan Owen
Josh Rogers
Katherine St. John

【讨论】:

    【解决方案2】:

    .split 返回一个列表,所以你正在尝试

     ["Falcon, Claudio", "Ford, Eric" ...].split(',')
    

    这显然不起作用,因为split 是一个字符串方法。试试这个:

    full_names = []
    for name in names.split("; "):
        last, first = name.split(', ')
        full_names.append(first + " " + last)
    

    给你

    ['Claudio Falcon', 'Eric Ford', 'Megan Owen', 'Josh Rogers', 'Katherine St. John']
    

    【讨论】:

    • 至少有一个名字有空格。
    • @Goodies 为什么这很重要?
    • @Goodies 没问题 :)!
    • FWIW,我的第一次尝试也使用了 '; '', ',但我认为最好不要假设这些分隔符周围有多少空白。
    【解决方案3】:

    您正在拆分整个列表而不是每个字符串。改成这样:

    def main():
    
        names=input("Please enter your list of names: ")
        person=names.split("; ")
        xname=[x.split(", ") for x in person]
    

    要打印出来,这样做:

    print("\n".join([" ".join(x[::-1]) for x in xname]))
    

    【讨论】:

    • 这不会在xname 中留下一些杂散的逗号吗?
    • @HumphreyTriscuit:我不确定你的意思,但你的评论指出我做错了什么。谢谢。
    • 我指的是您在名称字符串中有逗号,但您现在已修复它。
    • 这仍然有一些杂散的空间漂浮在周围。打印时,名字和姓氏之间有两个空格,名字之前有一个空格
    • @HumphreyTriscuit:我不确定你从哪里得到的。我刚刚对其进行了测试,除了我省略了一个右括号之外,它工作得很好。
    【解决方案4】:

    您可以使用以下代码:

       names = raw_input("Please enter your list of names:")
        data = names.split(";")
    

    数据将返回您的列表,以便处理该列表以获取名字和姓氏

        f_names=[]
        for i in data:
            l_name,f_name= i.split(",")
            f_names.append(f_name+" "+l_name)
        print "you entered \n"+ '\n'.join(p for p in f_names) 
    

    这样你就可以打印所需的输入

    【讨论】:

      猜你喜欢
      • 2012-10-20
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      相关资源
      最近更新 更多