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)をインポートしないようにしています。この道を歩き始めたとき、それらは1つのライナーになると確信していましたが、見つかりません。

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

これを行うために使用できます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 に答える
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 に答える