我有一个字符串,其名称以“和”字样分隔,以两种形式输入:“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
答案 0 :(得分:1)
事实上,您可以改进一些事项:
' and '
拆分,以避免拆分包含字母and
的名称(这样就不再需要trim
)for
循环if
移到列表理解的左侧,则只需要其中一个最后,如果您愿意,可以将整个事情放在一个稍微长一点的列表理解中:
surnames = sorted(i.split(",")[0] if "," in i else i.split()[-1]
for i in names.split(" and "))
但是,请注意,只有使用逗号分隔的样式编写具有多个姓氏的人员时,这仍然有效。