根据正则表达式匹配对字符串列表排序
我有一个文本文件,内容大概是这样的:
random text random text, can be anything blabla %A blabla
random text random text, can be anything blabla %D blabla
random text random text, can be anything blabla blabla %F
random text random text, can be anything blabla blabla
random text random text, %C can be anything blabla blabla
当我用 readlines()
读取这个文件时,它变成了一串句子的列表。现在我想按照每个句子中 %
后面的字母来对这个列表进行排序。也就是说,排序后应该是这样的:
random text random text, can be anything blabla %A blabla
random text random text, %C can be anything blabla blabla
random text random text, can be anything blabla %D blabla
random text random text, can be anything blabla blabla %F
random text random text, can be anything blabla blabla
有没有什么好的方法可以做到这一点,还是说我必须把每个字符串拆分成元组,然后把字母移动到特定的列,再用 key=operator.itemgetter(col)
来排序呢?
谢谢
4 个回答
1
这里有一个简单粗暴的方法。不过因为我不知道你具体的排序需求,所以不能确定这个方法是否适合你。
假设你的列表保存在 'listoflines
' 里:
listoflines.sort( key=lambda x: x[x.find('%'):] )
请注意,这个方法会把所有没有 '%' 字符的行按照它们最后一个字符进行排序。
4
这个怎么样?希望这能帮到你。
def k(line):
v = line.partition("%")[2]
v = v[0] if v else 'z' # here z stands for the max value
return v
print ''.join(sorted(open('data.txt', 'rb'), key = k))
9
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们不太了解这些工具的工作原理时。
比如说,有人可能在使用一个特定的库时,发现它的某个功能没有按照预期工作。这时候,了解这个库的基本用法和常见问题就显得特别重要。通常,开发者会在网上寻找解决方案,比如在StackOverflow这样的论坛上提问或查找答案。
在这些讨论中,其他开发者会分享他们的经验和解决方案,帮助提问者找到问题的根源。通过这些交流,我们可以学到很多实用的知识,避免在将来遇到同样的问题。
总之,遇到问题时,不要害怕去寻求帮助,社区里有很多人愿意分享他们的经验和解决办法。
In [1]: def grp(pat, txt):
...: r = re.search(pat, txt)
...: return r.group(0) if r else '&'
In [2]: y
Out[2]:
['random text random text, can be anything blabla %A blabla',
'random text random text, can be anything blabla %D blabla',
'random text random text, can be anything blabla blabla %F',
'random text random text, can be anything blabla blabla',
'random text random text, %C can be anything blabla blabla']
In [3]: y.sort(key=lambda l: grp("%\w", l))
In [4]: y
Out[4]:
['random text random text, can be anything blabla %A blabla',
'random text random text, %C can be anything blabla blabla',
'random text random text, can be anything blabla %D blabla',
'random text random text, can be anything blabla blabla %F',
'random text random text, can be anything blabla blabla']