跳过一个循环

时间:2018-07-12 15:42:13

标签: python list loops

说我有一个列表:

lis = [4, 8, 2, 4, 6]

我想遍历列表中的每个值并将其加倍,但是如果遇到数字2,则在将其加倍后,我应该跳过下一个数字,而在其后加倍。例如,最后我的列表应如下所示。

lis = [8, 16, 4, 4, 12]

使用for循环可以实现吗?

4 个答案:

答案 0 :(得分:1)

我写出了一个非常简单的解决方案,由于您似乎是初学者,因此应该易于理解

lis = [4, 8, 2, 4, 6]
new_lis = []
i = 0
while (i < len(lis)):
  new_lis.append(lis[i] * 2)
  if (lis[i] == 2):
    if (i+1 < len(lis)):
        new_lis.append(lis[i+1])
    i = i+1
  i = i+1

print(new_lis)

这将创建一个新列表,循环遍历旧列表,将加倍的值附加到新列表中,如果索引处的值为2,则跳过数字。

答案 1 :(得分:1)

该算法可以确定您要使用多少数字来将列表中的项目加倍(1或2)。这是我对这个问题的看法:

lis = [4, 8, 2, 4, 6]

def double_with_my_condition(l, doubler=2):
    for i in l:
        yield i * doubler

        if i == 2:
            doubler = 1
            continue

        doubler = 2

new_lis = [*double_with_my_condition(lis)]

print(new_lis)

输出:

  

[8,16,4,4,12]

答案 2 :(得分:0)

这可以工作!

Method-1:
lis = [4, 8, 2, 4, 6]
for i in range(len(lis)-1, -1, -1):
    if(lis[i-1] == 2):
        continue
    else:
        lis[i] = lis[i]*2  
lis

Method-2:
lis1 = [4, 8, 2, 4, 6]
indices = [i+1 for i, x in enumerate(lis1) if x == 2]  #Storing indices of next to 2
lis2 = [i*2 for i in lis1]
for i in indices:
    lis2[i] = lis1[i]  # replacing the previous values

print(lis2)

答案 3 :(得分:0)

您还可以使用列表推导

lis = [4, 8, 2, 4, 6]
print([lis[x] if lis[x - 1] == 2 else lis[x] * 2 for x in range(len(lis))])