Python split a list into subsets based on pattern

前端 未结 3 1150
名媛妹妹
名媛妹妹 2021-01-02 06:31

I\'m doing this but it feels this can be achieved with much less code. It is Python after all. Starting with a list, I split that list into subsets based on a string prefix.

3条回答
  •  醉话见心
    2021-01-02 06:43

    You could use itertools.groupby:

    >>> import itertools
    >>> mylist = ['sub_0_a', 'sub_0_b', 'sub_1_a', 'sub_1_b']
    >>> for k,v in itertools.groupby(mylist,key=lambda x:x[:5]):
    ...     print k, list(v)
    ... 
    sub_0 ['sub_0_a', 'sub_0_b']
    sub_1 ['sub_1_a', 'sub_1_b']
    

    or exactly as you specified it:

    >>> [list(v) for k,v in itertools.groupby(mylist,key=lambda x:x[:5])]
    [['sub_0_a', 'sub_0_b'], ['sub_1_a', 'sub_1_b']]
    

    Of course, the common caveats apply (Make sure your list is sorted with the same key you're using to group), and you might need a slightly more complicated key function for real world data...

提交回复
热议问题