我有可用项目列表,可用于创建总长度为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)
您可以使用 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)
使用一些整数数学而不是导入的替代解决方案:
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)。
注意:不检查空列表