如何为下一次迭代发出命令

时间:2018-02-21 18:29:08

标签: python for-loop

我试图编写一个代码来说明如果条件符合列表中的值,则在下一次迭代中使该值成为不同的值。问题是我不知道代码是什么告诉python在下一次迭代中做到这一点 我的代码。

list_ = [4, 5, 6, 6, 4, 5]

for i in range(0, 10):
    for j in range(0, len(list_)):
        if list_[j] == 5:
            if list_[(j-1) % len(list)] == 4:
                list_[j][i+1] = 3

但这不起作用,因为我得到一个int'对象不支持项目分配错误。我也知道一些缩进可能是错的,因为我努力将它们放到这里

2 个答案:

答案 0 :(得分:0)

也许这就足够了,根据你的逻辑构建一个新的列表:

list_ = [4, 5, 6, 6, 4, 5]

lst = []
for i, x in enumerate(list_):
    if (x == 5) and (list_[i-1] == 4) and (i-1 > 0):
        lst.append(3)
    else:
        lst.append(x)
lst   
# [4, 3, 6, 6, 4, 3]  

作为列表理解:

[3 if (x == 5) and (list_[i-1] == 4) and (i-1 > 0) else x for i, x in enumerate(list_)]
# [4, 3, 6, 6, 4, 3]

如果(i-1 > 0)位于第一个位置,5会阻止搜索结尾。

此实现的三个主要pythonic主题:

  1. 创建一个新的可迭代而不是改变它
  2. enumerate可迭代以减少索引的使用
  3. 使用布尔值链接条件而不是嵌套条件

答案 1 :(得分:0)

您的确切预期结果不是那么清楚,但无论如何我建议您这个解决方案似乎可以解决您的问题:

list_ = [4, 5, 6, 5, 4, 5]

for j in range(0, len(list_)):
    if (list_[j] == 5) and (list_[j-1] == 4):
        list_[j] = 3

print(list_)

注意:在第一次迭代中,list_[j-1]引用列表的最后一个元素。