说我有一个列表:
lis = [4, 8, 2, 4, 6]
我想遍历列表中的每个值并将其加倍,但是如果遇到数字2,则在将其加倍后,我应该跳过下一个数字,而在其后加倍。例如,最后我的列表应如下所示。
lis = [8, 16, 4, 4, 12]
使用for循环可以实现吗?
答案 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))])