2

私はPythonにまったく慣れていません。

大まかに私は次のことをしたいです:

var=0
while x doesn't change
   return var

   if x changes
      var = var + 1

その後、これはすべてのx値が処理されるまで継続されます。x値のリストがありません。

私のアイデアからコードに移行する方法について何か提案はありますか?

私はArcmapのフィールド計算機で働いています。

4

2 に答える 2

0
def edgedetector(it):
    var = 0
    old_i = object() # guaranteed to be different from everything else
    for i in it:
        if i != old_i:
            var += 1
            old_i = i
        yield var

このジェネレーター機能を使用して、次のことを行います。

itあなたが興味のある価値観を持っている反復可能性を持っていると仮定すると、あなたは

import itertools
it_a, it_b = itertools.tee(it) # split it up
for items, val in itertools.izip(it_a, edgedetector(it_b)):
    #do whatever you want to do with it

別:

def edgedetector(it):
    var = 0
    old_i = object() # guaranteed to be different from everything else
    for i in it:
        if i != old_i:
            var += 1
            old_i = i
        yield i, var # this is changed...

それを簡単にします:

for items, val in edgedetector(it):
    #do whatever you want to do with it

object()クラスのインスタンスのインスタンス化ですobject。ジェネレーター関数は、これを使用して、最初の「古い」オブジェクトとiterableの最初の要素との不等式を検出します。

于 2012-10-11T14:29:11.343 に答える
0
y = x
while x == y:
    # your code that might change x
于 2012-10-11T14:18:12.403 に答える