删除重复自身的列表元素 - python

时间:2018-05-12 11:09:27

标签: python

我有一个看起来像

的数组
A=[0,0,1,1,2,5,6,3,7,7,0,0,1,1,2,5,6,3,7,7]

自" 0,0,1,1,2,5,6,3,7,7"部分reapeats本身我不需要第二部分所以对于给定的数组它应该给我

A=[0,0,1,1,2,5,6,3,7,7]

我无法使用set()函数,我不知道在这种情况下我还能使用什么。是否有可以执行此操作的函数?

1 个答案:

答案 0 :(得分:0)

我定义了以下两种方法:

def check_repeat(l):
    for i in range(1,len(l)//2+1):
        pattern=l[:i]
        sub_lists=create_sublists(l, i, True)
        if all([x==pattern for x in sub_lists]):
            print("Found pattern {} with length {}".format(pattern, i))
            return pattern


def create_sublists(l, n, only_full=False):
    sub_lists=[]
    for j in range(n, len(l),n):
        if only_full and len(l[j:j+n])<n:
            continue
        sub_lists.append(l[j:j+n])
    return sub_lists

它的工作原理如下:使用check_repeat(your_list)检查输入列表的任意长度模式。如果i的第一个i条目等于所有后续长度为your_list的子列表,则会找到长度为i的模式。子列表由方法create_sublists创建,该方法返回列表列表。如果only_full设置为True,则只允许长度为n的子列表。这会处理您的列表查找的示例,例如此A=[1,2,3,1,2,3,1,2],并且您希望接受[1,2,3]作为有效模式,并忽略剩余的子列表[1,2]

然后将每个子列表与当前pattern进行比较,即输入列表的第一个i条目。如果所有子列表与当前模式相等,则会找到真实模式。

Python finding repeating sequence in list of integers?中的解决方案相比,我不仅检查下一个i条目是否与当前模式匹配,还检查以下所有长度为i的子列表。