我有以下格式的电子邮件地址列表:
姓名###@电子邮件在
但数字并不总是存在的。例如:john45@email.com, bob@email.comjoe2@email.com,等等。我想把这些名字按数字排序,没有数字的名字排在第一位。我已经想出了一些可行的方法,但是作为Python的新手,我很好奇是否有更好的方法来实现它。我的解决方案是:
import re
def sortKey(name):
m = re.search(r'(\d+)@', name)
return int(m.expand(r'\1')) if m is not None else 0
names = [ ... a list of emails ... ]
for name in sorted(names, key = sortKey):
print name
但我不确定怎么用这个函数。我知道这会起作用:
^{pr2}$但我想我不需要打电话搜索两次。在Python中最优雅的方法是什么?在
最好使用
re.findall
就好像没有找到数字一样,那么它将返回一个空列表,该列表将在填充的列表之前排序。用于排序的键是找到的任何数字(转换为整数),后跟字符串本身。。。在而使用
john1
来代替,输出是:['bob@email.com', 'john1@email.com', 'joe2@email.com']
,这表明尽管在词典学上是在joe之后,但是这个数字已经被考虑了,首先将john
前移。在如果您想保留现有的使用方法,有一种方法有些老套搜索在一个单一的班轮(但恶心):
^{pr2}$相关问题 更多 >
编程相关推荐