数组中类似项的序列

时间:2017-11-01 08:19:31

标签: python arrays elements similarity

我第一次使用Python,我需要找到一种有效的方法来搜索三个,四个或五个元素的连续序列是否在更大的数组中是相同的。

例如:

array = [1, 0, 0, 0, 1]

输出:

number_same = 3
element = 0
positions = [1, 2, 3]

有任何建议或帮助吗?

THX!

4 个答案:

答案 0 :(得分:3)

以下行将为您提供值的元组列表及其在数组中的位置(按重复分组):

from itertools import groupby
[(k, [x[0] for x in g]) for k, g in groupby(enumerate(array), lambda x: x[1])]
>>> [(1, [0]), (0, [1, 2, 3]), (1, [4])]

您可以稍后对其进行过滤以仅重复3次以上:

filter(lambda x: len(x[1])>2, grouped_array)

使用以下答案作为参考: What's the most Pythonic way to identify consecutive duplicates in a list?

答案 1 :(得分:0)

我不太了解Python,但我不认为有一个内置函数可以实现这一点。

你可以遍历列表并使用第二个数组作为计数器。

即。如果位置0中的数字是1,则将1添加到第二个数组中的位置1

original_array = [1, 0, 0, 0, 1]
second_array_after_populating = [3, 2, 0, 0, 0]

然后你可以只扫描一次列表,找到最常见的号码,以及该号码的数量。一旦你知道了这个数字,你就可以通过原始列表进行扫描,找到它出现的位置。

答案 2 :(得分:0)

我认为Counter课对你有用。

from collections import Counter
array = [1, 0, 0, 0, 1]
counter = Counter(array)
mc = counter.most_common(20)
print(mc)

# [(0, 3), (1, 2)]
most_common = mc[0][0] #  = 0
number_same = mc[0][1] #  = 3
positions = [i for i, x in enumerate(array) if x == most_common]

来自此SO post的最后一行。

答案 3 :(得分:0)

这不是一个完整的答案,但它是一个开始。

这使用与groupby()库关联的itertools方法。 groupby()方法查找连续的值组(与真值组相反),因此非常适合查找序列。

array = [1, 0, 0, 0, 1]

from itertools import groupby

g = groupby(array)
for value, grp in g:

grp是一个迭代器...我们可以通过使用list()函数强制显示内容来将内容提取到列表中。

    grp = list(grp)
    length = len(grp)

使用if的{​​{1}}语句是检查各种值的便捷方法。

in