Py学习  »  Python

如何在python中对相似序列进行分组?[副本]

c24b • 4 年前 • 769 次点击  

这个问题已经有了答案:

我想在python中分割一个项目列表序列,或者如果它们相似的话对它们进行分组。

我已经找到了一个解决方案,但我想知道是否有更好和更有效的方法来做到这一点(总是要学习更多)。

这是主要目标

input = ['a','a', 'i', 'e', 'e', 'e', 'i', 'i', 'a', 'a'] 
desired_ouput = [['a','a'], ['i'], ['e','e', 'e'], ['i', 'i'], ['a', 'a']  

我也很想听听揭露问题的好方法

#!/usr/bin/env python3
def group_seq(listA):
    listA = [[n] for n in listA]
    for i,l in enumerate(listA):
        _curr = l
        _prev = None
        _next= None
        if i+1 < len(listA):
            _next = listA[i+1]
        if i > 0:
            _prev = listA[i-1]    
        if _next is not None and _curr[-1] == _next[0]:
            listA[i].extend(_next)
            listA.pop(i+1)
        if _prev is not None and _curr[0] == _prev[0]:
            listA[i].extend(_prev)
            listA.pop(i-1)
    return listA  
listA = ['a','a', 'i', 'e', 'e', 'e', 'i', 'i', 'a', 'a']
output = group_seq(listA)    
print(listA)
['a', 'a', 'i', 'e', 'e', 'e', 'i', 'i', 'a', 'a']
print(output)   
[['a', 'a'], ['i'], ['e', 'e', 'e'], ['i', 'i'], ['a', 'a']]
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46585
 
769 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Mark Meyer
Reply   •   1 楼
Mark Meyer    4 年前

我想 itertool.groupby

from itertools import groupby

inp = ['a','a', 'i', 'e', 'e', 'e', 'i', 'i', 'a', 'a'] 

output = [list(g) for k,g in groupby(inp)]
print(output)

印刷品

[['a', 'a'], ['i'], ['e', 'e', 'e'], ['i', 'i'], ['a', 'a']]

def group_seq(listA):
    prev = None
    cur = None
    ret = []

    for l in listA:
        if l == prev:    # assumes list doesn't contain None
            cur.append(l)
        else:
            cur = [l]
            ret.append(cur)
        prev = l

    return ret