我第一次使用Python,我需要找到一种有效的方法来搜索三个,四个或五个元素的连续序列是否在更大的数组中是相同的。
例如:
array = [1, 0, 0, 0, 1]
输出:
number_same = 3
element = 0
positions = [1, 2, 3]
有任何建议或帮助吗?
THX!
答案 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