4

パラメータにリストとしきい値がある関数を作成したいと考えています。この関数は、リスト内の値のうち、前の値よりもしきい値以上大きいものについて、int インデックスのリストを返します。

これまでのところ、私は作成しました:

def bigger(lst, number):
    x = []
    for a, prev in zip(lst[1:], number):
        diff = a - prev
       if diff >= 2:
            x.append(a)
    print(x)

bigger([0,1,-1,3,7,4,5,3,2,4,8],2)

これにより、次の基準を満たす番号のリストが出力されますが、インデックスのリストを出力したいと考えています。したがって、[3, 4, 9, 10] (インデックス) を出力する必要がありますが、[3, 7, 4, 8] を出力します。

4

3 に答える 3

4

とを使用するzipenumerateenumerate項目だけでなくインデックスも返されます。

def solve(lis, num):
    for i, (x, y) in enumerate(zip(lis, lis[1:]), 1):
        if y - x >= num:
            yield i

print list(solve([0,1,-1,3,7,4,5,3,2,4,8], 2))
#[3, 4, 9, 10]

ジェネレーターもサポートしたい場合は、次のようにします。

from itertools import tee, izip
def solve(lis, num):
    it1, it2 = tee(lis, 2)
    next(it2)  #drop first item
    for i, (x, y) in enumerate(izip(it1, it2), 1):
        print x, y
        if y - x >= num:
            yield i

print list(solve((x for x in [0,1,-1,3,7,4,5,3,2,4,8]), 2))
#[3, 4, 9, 10]
于 2013-10-28T07:01:43.450 に答える
2

ヒント、list.index(element, [start,[end]])これを達成するために使用できます

@Games Brainiac、これは list.index() を使用して要素のリストの位置を返す方法です

a = [1,2,3,4,5,5,6,6,7,8]
b = [2,5,6]
def findItem(a,b):
    index = []
    for item in b:
        start = -1
        while True:
            try:
                start = a.index(item, start+1)
                index.append(start)
            except ValueError:
                break;
    return index
print findItem(a,b)

私の場合、結果は次のとおりです。

[1, 4, 5, 6, 7]

次回はよく考えて反対票を投じてください

于 2013-10-28T06:56:41.477 に答える
0
def bigger(l, num):
    _ret = []
    for i, var in enumerate(l[1:], start=1):
        if var - l[i - 1] >= num:
            _ret.append(i)

    return _ret

上記のコードを見てください。期待どおりの動作をします。実施。上記ですが、リスト内包表記では次のようになります。

def bigger(l, num):
    return [i for i, var in enumerate(l[1:], start=1) if var - l[i - 1] >= num]

これからジェネレーターを作成することもできます。

def bigger(l, num):
    for i, var in enumerate(l[1:], start=1):
        if var - l[i - 1] >= num:
            yield i

実施

于 2013-10-28T07:08:16.160 に答える