как я могу использовать список * я в одной строке для цикла - PullRequest
0 голосов
/ 25 марта 2020

Текущий код:

res = []
for i in range(0,len(nums),2):
    res.extend([nums[i+1]]*nums[i])       
return res 

Ожидаемый:

res = [([nums[i+1]]*nums[i]) for i in range(0,len(nums),2)]

Разница:

дает: [[1,1],[2,2,2]]

Ожидается: [[1,1,2,2,2]]

1 Ответ

1 голос
/ 25 марта 2020

Вы можете фактически использовать несколько пунктов в понимании списка для достижения этого (предположим, что вы хотите nums[i] копий nums[i + 1] в списке и вы хотите, чтобы список был одномерным):

nums = [2, 1, 3, 2]
res = [nums[i+1] for i in range(0,len(nums),2) for _ in range(nums[i])]
# [1, 1, 2, 2, 2]

Здесь я использую и for i in range(0, len(nums), 2), как было в вашем исходном коде, и for _ in range(nums[i]) для имитации повторения, предоставленного * nums[i].

Затем вы можете заключить это в другой список, если хотите .

...