python - 是否可以从迭代器获取下一项的索引?

标签 python python-3.x dynamic-analysis

考虑以下程序,从标题来看,它应该是不言自明的。我需要实现函数 next_index(it) ,该函数返回迭代器将要返回的下一个项目的索引。

def next_index(it):
    #do something here
    #return the index of next element the iterator will fetch
    return -1 #dummy value being returned now

l = [0,1,2,3,4]
it = iter(l)
fst = it.__next__()
print(fst) # prints 0, the next call to it.__next__() will return the element at index 1

n_i = next_index(it)
#n_i should be 1
print(n_i)

_ = it.__next__()

n_i = next_index(it)
#n_i should be 2 now
print(n_i)

我知道迭代器通常在不需要索引时使用,对于索引我们可以使用enumerate。但是,我正在尝试使用 bytecode 进行一些动态分析。水平追踪。使用 iterators 迭代如下所示的循环。我需要跟踪迭代器正在访问的索引。尽管应该有解决方法,例如,明确地跟踪分析程序中的索引,但像 next_index(it) 这样的函数将使事情变得简单并且不易出错。

l = [0,1,2,3,4]
for c in l:
    print(c)

最佳答案

用一些东西包裹迭代器,以记录所产生的结果。

class EnumeratedIter:
    def __init__(self, it):
        self.it = it
        self.index = 0

    def __next__(self):
        self.index += 1
        return next(self.it)

    def __iter__(self):
        return self


def next_index(it):
    return it.index

l = list("abcde")
it = EnumeratedIter(iter(l))

n_i = next_index(it)
assert n_i == 0

next(it)
n_i = next_index(it)
assert n_i == 1

next(it)
n_i = next_index(it)
assert n_i == 2

关于python - 是否可以从迭代器获取下一项的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55623749/

相关文章:

python-3.x - 如何检查 Python venv 在 Windows 中是否处于事件状态?

python - Python 3 内置模块中 numbers.Integral 和 int 之间的关系是什么

python - 如何在不使用 reverse=True 参数的情况下以相反的顺序对字符串列表进行排序?

security - 静态分析无法捕获的问题子集是什么?

java - 随时间绘制方法调用图的工具

python - 如何选择行并替换 Pandas 中的某些列

python - Flask 和 Bootstrap 删除模态 POST

python - np.array 中特定长度的连续部分的 Min-Max 差异

java - 有哪些有趣、免费、开源的 Java 动态分析工具?

python - Keras 数组形状错误