2

我试图弄清楚如何更清楚地确定特定项目是否按顺序出现在我的列表中

例如假设我有一个列表:

my_list=[1,2,2,2,4,5,1,0]

在上面的示例中,1 的重复实例不会在列表中按顺序出现,但 2 的所有实例都会出现。我似乎可以弄清楚如何做到这一点的唯一方法是非常笨拙

def check_sequencing(some_list,item_to_check):
    prev_instance = 0
    difference_list = []
    for counter, item in enumerate(some_list):
        if item_to_check == item:
        difference_list.append(counter - prev_instance)
        prev_instance = counter
    if set(difference_list[1:]) == set([1]):
        return 'True'
    else:
        return 'False'

我试图避免导入另一个库(numpy)我只是确定当我开始走这条路时他们会是一个班轮但我找不到它。

4

3 回答 3

3
>>> collections.Counter(x[0] for x in itertools.groupby(my_list)).get(1, 0) > 1
True
>>> collections.Counter(x[0] for x in itertools.groupby(my_list)).get(2, 0) > 1
False
于 2012-12-19T00:35:09.197 回答
1

好的,这一次我有一个真正的单线工作:

all(x==i for x in L[L.index(i):len(L)-[k for k in reversed(L)].index(i)])

如果它是真的,那么它会发生不止一次。替换L为您的列表和i您要搜索的术语。

于 2012-12-19T00:52:32.967 回答
1

您可以使用它itertools.groupby来执行此操作:

>>> import itertools
>>> any(len(list(n[1])) >= 2 for n in itertools.groupby(l))
True

如果你想避免使用len(list(gen)),你可以使用这样的东西:

>>> import itertools
>>> any(sum(1 for i in n[1]) >= 2 for n in itertools.groupby(l))
True
于 2012-12-19T00:35:52.657 回答