从一个列表中提取列表列表中的所有连续重复

时间:2017-12-10 19:14:59

标签: python-3.6

提取给定列表中的所有连续重复:

list1 = [1,2,2,3,3,3,3,4,5,5]

它应该产生这样的列表

[[2,2],[3,3,3,3],[5,5]]

我尝试了下面的代码。我知道这不是解决这个问题的正确方法,但我无法管理如何解决这个问题。

list1 = [1,2,2,3,3,3,3,4,5,5]
list2 = []
for i in list1:
    a = list1.index(i)
    if list1[a] == list1[a+1]:
       list2.append([i,i])
print(list2)

3 个答案:

答案 0 :(得分:0)

您可以使用它来实现它。有更简单的"使用itertoolsgroupby获得相同结果的解决方案,这就是如何做到这一点"手工":

def FindInnerLists(l):
    '''reads a list of int's and groups them into lists of same int value'''
    result = []
    allResults = []
    for n in l:
        if not result or result[0] == n: # not result == empty list
            result.append(n)
        if result[0] != n: # number changed, so we copy the list over into allResults
            allResults.append(result[:])
            result = [n]   # and add the current to it

    # edge case - if result contains elements, add them as last item to allResults            
    if result:       
        allResults.append(result[:])

    return allResults

myl = [2, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, 7, 1, 1, 1,2,2,2,2,2]

print(FindInnerLists(myl))

输出(适用于2.6和3.x):

[[2], [1], [2], [1, 1, 1, 1], [2, 2, 2], [1], [2], [7], [1, 1, 1], [2, 2, 2, 2, 2]]

答案 1 :(得分:0)

另一种方法:

list1 = [1, 2, 2, 3, 3, 3, 3, 4, 5, 5]

result = [[object()]]  # initiate the result with object() as a placeholder
for element in list1:  # iterate over the rest...
    if result[-1][0] != element:  # the last repeated element does not match the current
        if len(result[-1]) < 2:  # if there was less than 2 repeated elements...
            result.pop()  # remove the last element
        result.append([])  # create a new result entry for future repeats
    result[-1].append(element)  # add the current element to the end of the results
if len(result[-1]) < 2:  # finally, if the last element wasn't repeated...
    result.pop()  # remove it

print(result)  # [[2, 2], [3, 3, 3, 3], [5, 5]]

你可以在任何类型的列表中使用它,而不仅仅是数字。

答案 2 :(得分:0)

这样可行:

list1 = [1,2,2,3,3,3,3,4,5,5]
res = []
add = True
last = [list1[0]]
for elem in list1[1:]:
    if last[-1] == elem:
        last.append(elem)
        if add:
            res.append(last)
            add = False
    else:
        add = True
        last = [elem]
print(res)

输出:

[[2, 2], [3, 3, 3, 3], [5, 5]]