将列表中的项目重复到所需的长度

Nep*_*nat 8 python

我有可用项目列表,可用于创建总长度为4的新列表。可用项目列表的长度永远不会超过4个项目。如果列表中的元素少于4个,我希望使用从start元素开始的可用元素填充它。

范例1:

available_items = [4, 2]
Result -> [4, 2, 4, 2]
Run Code Online (Sandbox Code Playgroud)

范例2:

available_items = [9, 3, 12]
Result -> [9, 3, 12, 9]
Run Code Online (Sandbox Code Playgroud)

范例3:

available_items = [3]
Result -> [3, 3, 3, 3]
Run Code Online (Sandbox Code Playgroud)

我觉得我的解决方案不是最优的,但是到目前为止,我发现没有什么更好的了:

available_items = [3, 5]
required_items = 4

if len(available_items) == 1:
  new_items = [available_items[0]] * required_items
else:
  new_items = available_items + []
  for i in range(required_items - len(available_items)):
    new_items.append(available_items[i])

print(new_items)
Run Code Online (Sandbox Code Playgroud)

Rak*_*esh 6

您可以使用 itertools.cycle

例如:

from itertools import cycle

available_items_1 = cycle([4, 2])
available_items_2 = cycle([9, 3, 12])
available_items_3 = cycle([3])

n = 4

print([next(available_items_1)for i in range(n)])
print([next(available_items_2)for i in range(n)])
print([next(available_items_3)for i in range(n)])
Run Code Online (Sandbox Code Playgroud)

输出:

[4, 2, 4, 2]
[9, 3, 12, 9]
[3, 3, 3, 3]
Run Code Online (Sandbox Code Playgroud)


meo*_*dog 5

使用一些整数数学而不是导入的替代解决方案:

def repeat_items(l, c):
    return l * (c // len(l)) + l[:(c % len(l))]

>>> repeat_items([1, 2, 3], 4)
[1, 2, 3, 1]
Run Code Online (Sandbox Code Playgroud)

避免重复多余的元素(如果len(l)大小很大,这是特别有益的c)。

注意:不检查空列表