2

我对python很陌生。

大致我想做以下事情:

var=0
while x doesn't change
   return var

   if x changes
      var = var + 1

这将继续进行,直到处理完所有 x 值。我没有 x 值的列表。

任何建议如何从我的想法中获取代码?

我在 Arcmap 的字段计算器中工作。

4

2 回答 2

0
y = x
while x == y:
    # your code that might change x
于 2012-10-11T14:18:12.403 回答
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。生成器函数使用它来检测初始“旧”对象与可迭代对象的第一个元素的不等式。

于 2012-10-11T14:29:11.343 回答