2013-04-18 40 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