【发布时间】:2017-11-07 15:52:48
【问题描述】:
我想搜索一个列表:
[0, 0, 1, 0, 1, 1, 1, 0, 1, 1]
并替换/编辑不同于前一个项目和下一个项目的项目。对于 xxample:我想删除/编辑上面列表中索引 2 处的 1。
看看我下面的代码,请继续阅读我的代码下面的核心问题:
!更新:结果应该是:[0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
x = [0, 0, 1, 0, 1, 1, 1, 0, 1, 1]
print(x)
hiter = iter(x)
next(hiter)
prev = None
for i in x:
try:
print('prev %s - CURRENT %s - next %s' % (prev, i, next(hiter)))
prev = i
#if i != prev and i != next(hiter):
# x[i] = prev
except StopIteration:
break
print(x)
我们知道上一项、下一项和当前项。
但每次我使用:
如果 i != prev 和 i != next(hiter)...next(hiter) 破坏秩序。换句话说,如果我在循环中使用next(hiter) 超过 1 次,Python 会将下一项读取为 double,因为我在循环中使用了两次 next(hiter)。
我也尝试过声明单独的变量,例如y = next(hiter) - 但它仍然没有工作(显然不会工作,但我还是不顾一切地检查它xD)。
我没有任何线索,另外hiter.__next__()和next(hiter)做的一样。
【问题讨论】:
-
为什么不迭代索引而不是对象呢?而不是
for i in x,使用for i in range(len(x))进行迭代,并使用x[i]访问元素。您将能够访问x[i-1]和x[i+1],而无需像使用next那样使用它们。 -
你能包括“预期输出”吗?索引 3 和 7 的零点呢?
-
除非我误解了这似乎是一种复杂的方法来解决看似简单的问题,请澄清您的问题和输出
-
此外,
next(x)执行自身x.__next__()。 -
如果你迭代它而不是索引,你将无法修改原始列表。
标签: python list loops iterator next