2013-04-18 41 views
-3

我有一个字符串,名称用单词“and”分隔,并以“First Last”或“Last,First”两种形式输入。我想要生成一个只有姓氏按字母顺序排列的列表。 我是新来的Python,所以我在想,如果有做我所做的事,更短的或更好的方式:从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 
+3

使用codereview.stackexchange.com –

+0

你想做什么!?什么是数据的一般形式!! ??请澄清。 – IcyFlame

回答

1

其实有几件事情可以改善:

  • 你应该' and '分开,以避免包含字母and分裂名(这种方式,trim不再需要)
  • for循环在你的两个列表内涵不需要
  • 如果移动if到列表理解的左边,你只需要其中的一个

最后,你可以把整个事情在一个刚刚稍长列表解析,如果你喜欢:

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

但是,请注意,如果使用逗号分隔样式编写多个姓氏的人,这仍然只能工作。

+0

优秀的答案。我不知道为什么我也得到了低估。我相信这个问题非常清楚,我展示了我在寻求帮助之前完成的所有工作。 – petobens