3

2 つの Python リストがあるとします。

my_list = ['a', 'bb', 'c', 'bb', 'cc', 'bbc']
sublist = ['bb', 'bb', 'bbc']

サブリストは、* my_list * の 1 番目、3 番目、5 番目の要素で構成されているようです。[1, 3, 5]これら 2 つのリストを指定して、 index を取得したいと思います。これを行う簡単な方法はありますか?

ご了承ください:

  1. リストは同じ要素を持つことができます。
  2. サブリストは、元のリストの要素の順序を維持します。
4

5 に答える 5

2

@Blenderのアプローチはリストに最適です(これがこの問題に伴うすべてです)。この方法はすべてのイテラブルに対してより一般化されています

>>> def indices(a, b): # find indices of items from b inside a
        enumerate_a = enumerate(a)
        for x in b:
            for i, y in enumerate_a:
                if x == y:
                    yield i
                    break


>>> list(indices(['a', 'bb', 'c', 'bb', 'cc', 'bbc'], ['bb', 'bb', 'bbc']))
[1, 3, 5]
于 2013-04-06T06:33:47.830 に答える
0
def get_indices(lst, sublist):
    result = []
    i = 0
    for x in sublist:
        result.append(lst.index(x, i))
        i = result[-1] + 1
    return result

例:

>>> get_indices(['a', 'bb', 'c', 'bb', 'cc', 'bbc'], ['bb', 'bb', 'bbc'])
[1, 3, 5]
>>> get_indices(['a', 'bb', 'c', 'bb', 'cc', 'bbc'], ['c', 'bb', 'bbc'])
[2, 3, 5]
于 2013-04-06T06:43:00.563 に答える
0

Blenderの答えが一番好きです。しかし、index() 関数にはパラメータ「start」があるとは思わないので、以下を少し修正しました。

idx = 0
start = 0
for i in sublist:
    idx = my_list[start:].index(i) + start
    start = idx + 1
    yield idx
于 2013-04-06T08:53:57.010 に答える
0

私の解決策

def getIndex(list, sublist):
    index = []
    j = 0;
    for i in range(len(list)):
        if(sublist[j] == list[i]):
            index.append(i)
            j += 1

    return index

それはのように動作しますか?

$ python -i p.py 
>>> getIndex(['bb', 'aa', 'bb'], ['aa', 'bb'])
[1, 2]
>>> getIndex(['a', 'bb', 'c', 'bb', 'cc', 'bbc'], ['bb', 'bb', 'bbc'])
[1, 3, 5]
>>> getIndex(['a', 'bb', 'c','bbc', 'bb', 'cc', 'bbc'], ['bb', 'bb', 'bbc'])
[1, 4, 6]

私がまだ間違っている場合は、誰か教えてください。

于 2013-04-06T07:04:25.250 に答える