我有一个列表,让我们说:list = [6,2,6,2,6,2,6],我希望它创建一个新列表,其中每个其他元素乘以2并且每个其他元素相乘1(保持不变)。 结果应该是:[12,2,12,2,12,2,12]。
def multi():
res = 0
for i in lst[0::2]:
return i * 2
print(multi)
也许是这样的,但我不知道如何继续前进。我的解决方案怎么样错了?
答案 0 :(得分:6)
您可以使用切片分配和列表理解:
l = oldlist[:]
l[::2] = [x*2 for x in l[::2]]
你的解决方案是错误的,因为:
res
被声明为数字而不是列表multi
这是您的代码,已更正:
def multi(lst):
res = list(lst) # Copy the list
# Iterate through the indexes instead of the elements
for i in range(len(res)):
if i % 2 == 0:
res[i] = res[i]*2
return res
print(multi([12,2,12,2,12,2,12]))
答案 1 :(得分:2)
您可以使用列表综合和enumerate
函数重建列表,如下所示
>>> [item * 2 if index % 2 == 0 else item for index, item in enumerate(lst)]
[12, 2, 12, 2, 12, 2, 12]
enumerate
函数在每次迭代中给出iterable和当前项中它们的当前索引。然后我们使用条件
item * 2 if index % 2 == 0 else item
决定要使用的实际值。在此处,if index % 2 == 0
将使用item * 2
,否则item
将按原样使用。