-3

我有一个字符串,其名称用“and”分隔,以两种形式输入:“First Last”或“Last, First”。我想生成一个仅包含按字母顺序排序的姓氏的列表。我是 Python 新手,所以我想知道是否有更短或更好的方法来做我所做的事情:

names = 'John Foo and Baz, Mike Tom and Bar Foo, S. P.' 
authors  = [ i.strip() for i in names.split("and") ]
comma = [ i.split(',')[0] for i in [i for i in authors if "," in i] ]
nocomma = [ i.split()[-1] for i in [i for i in authors if not "," in i] ]
surnames = comma + nocomma
surnames.sort()
print surnames
4

1 回答 1

1

事实上,您可以改进以下几点:

  • 您应该拆分' and '以避免拆分包含字母的名称and(这种方式trim不再需要)
  • for不需要两个列表推导中的双循环
  • 如果将 移到if列表理解的左侧,则只需要其中一个

最后,如果您愿意,您可以将整个内容放在一个稍长的列表理解中:

surnames = sorted(i.split(",")[0] if "," in i else i.split()[-1]
                  for i in names.split(" and "))

但是请注意,这仅在使用逗号分隔的样式书写具有多个姓氏的人时才有效。

于 2013-04-18T18:15:26.337 回答