Python中发现重复序列中的整数列表?(Python finding repeating sequ

2019-06-26 03:01发布

我有一个列表的列表,并且每个列表中有重复序列。 我试图计算列表整数的重复序列的长度:

list_a = [111,0,3,1,111,0,3,1,111,0,3,1] 

list_b = [67,4,67,4,67,4,67,4,2,9,0]

list_c = [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,23,18,10]

这将返回:

list_a count = 4 (for [111,0,3,1])

list_b count = 2 (for [67,4])

list_c count = 10 (for [1,2,3,4,5,6,7,8,9,0])

任何意见或建议将受到欢迎。 我试图用re.compile去解决它,但现在,它并不完全正确。

Answer 1:

通过猜测2和一半的序列长度之间迭代猜测序列长度。 如果没有模式被发现,在默认情况下返回1。

def guess_seq_len(seq):
    guess = 1
    max_len = len(seq) / 2
    for x in range(2, max_len):
        if seq[0:x] == seq[x:2*x] :
            return x

    return guess

list_a = [111,0,3,1,111,0,3,1,111,0,3,1] 
list_b = [67,4,67,4,67,4,67,4,2,9,0]
list_c = [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,23,18,10]

print guess_seq_len(list_a)
print guess_seq_len(list_b)
print guess_seq_len(list_c)
print guess_seq_len(range(500))   # test of no repetition

这使(预期):

4
2
10
1

按照要求,这种替代给出最长的重复序列。 因此,它会返回4 list_b。 唯一的变化是guess = x ,而不是return x

def guess_seq_len(seq):
    guess = 1
    max_len = len(seq) / 2
    for x in range(2, max_len):
        if seq[0:x] == seq[x:2*x] :
            guess = x

    return guess


Answer 2:

这为我工作。

def repeated(L):
    '''Reduce the input list to a list of all repeated integers in the list.'''
    return [item for item in list(set(L)) if L.count(item) > 1]

def print_result(L, name):
    '''Print the output for one list.'''
    output = repeated(L)
    print '%s count = %i (for %s)' % (name, len(output), output)

list_a = [111, 0, 3, 1, 111, 0, 3, 1, 111, 0, 3, 1]
list_b = [67, 4, 67, 4, 67, 4, 67, 4, 2, 9, 0]
list_c = [
    1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2,
    3, 4, 5, 6, 7, 8, 9, 0, 23, 18, 10
]

print_result(list_a, 'list_a')
print_result(list_b, 'list_b')
print_result(list_c, 'list_c')

Python的set()函数将改变列表的一组,一个数据类型,它只能包含任何给定值之一,很像代数一组。 我转换的输入列表的一组,然后再返回到一个列表,该列表缩减到只有其独特的价值。 然后,我测试了原来的列表,每个值的,看它是否包含不止一次该值。 我返回的所有副本的列表。 代码的其余部分只是为了演示目的,以表明它的工作原理。

编辑:语法高亮不喜欢在我的文档字符串中的撇号。



文章来源: Python finding repeating sequence in list of integers?