Python只对序列中的子序列进行排序

时间:2015-07-06 17:19:16

标签: python string sorting

我的数据如下:

{12,} {13,} {10,}
{16,} {17, 15,} {22,}
{27,} {28,24,29,} {28,} {28,}

每一行都是一个序列。对于每一行,如果在{}中出现多个数字,我想在每个括号中对它们进行排序(升序排序),同时保持其余部分的顺序。最后,我想删除括号。所以我希望我的输出是这样的:

12, 13, 10
16, 15, 17, 22
27, 24, 28, 29, 28, 28

我的想法是将每一行转换成一个列表,但后来我完全卡住了。

2 个答案:

答案 0 :(得分:1)

使用re.sub功能的单线程。

>>> s = """{12,} {13,} {10,}
{16,} {17, 15,} {22,}
{27,} {28,24,29,} {28,} {28,}"""
>>> print(re.sub(r'(?<=\d) +(?=\d)', ', ', re.sub(r'\{[^}]*\}', lambda m: ', '.join(sorted(re.findall(r'\d+', m.group(0)), key=lambda x: int(x))), s)))
12, 13, 10
16, 15, 17, 22
27, 24, 28, 29, 28, 28

答案 1 :(得分:0)

您可以使用嵌套列表解析:[[f for s in sequences for f in sorted(s)] for sequences in lines]