试图使函数通过对重复进行分组来简化整数列表

我想在python中创建一个函数,该函数接受一个列表,该列表包含1个以上按数字顺序排列的整数元素,并返回一个与输出相同整数的列表,但所有重复项在它们自己的列表中分组在一起,此列表是该函数返回的列表中的元素。例如:

[3,3,4,5,6,6]将返回为[[3,3],[4,4],[6,6]]

我试图为每个条件嵌入多个if语句,但这太混乱了,太快了。

def simplify(mylist):
    if len(mylist) > 1:
        newlist = []
        for i in range(0,len(mylist) - 1):
            if (mylist[i] == mylist[i + 1]):
                count = 2
                group = [mylist[i],mylist[i]]
                while (i + count) <= (len(mylist) - 1):
                    if mylist[i] == mylist[i + count]:
                        group.append(mylist[i])
                        count += 1
                    else:
                        newlist.append(group)
                        break
            else:
                newlist.append(mylist[i])
        print(newlist)
        return (newlist)

因此,我希望它能够执行我所描述的函数应做的事情,但是随后导致一个包含元素的列表,这些元素在列表中重复出现,并减少一个元素,直到它完成迭代并且没有附加最后一个值。示例:

输入[3,5]

返回了[3,4]

oliver112233 回答:试图使函数通过对重复进行分组来简化整数列表

鉴于索引已已排序,您应该只使用itertools.groupby

from itertools import groupby

def simplify(mylist):
     return [list(group) for key,group in groupby(mylist)]

它将给您:

In [14]: simplify([3,3,4,5,6,6])
Out[14]: [[3,3],[4,4],[5],[6,6]]
,

使用柜台

from collections import Counter
mylist = [3,6]
C = Counter(mylist)
output=[ [key,]*val if val >1 else key for key,val in C.items()]
,

我看到如果只出现一次,您不希望该项目成为列表,

from collections import Counter
x = [3,6]
output_list = []
for key,value in Counter(x).items():
    if value != 1:
        output_list.append([key]*value)
    else:
        output_list.append(key)

print(output_list)

输出:

[[3,6]]
本文链接:https://www.f2er.com/3148246.html

大家都在问