Fah*_*med 0 python list slice python-itertools circular-list
我是Python的新手,我需要一个循环列表.我有一个5个标签的列表:
taglist = ["faint", "shocking", "frosty", "loved", "sadness"]
Run Code Online (Sandbox Code Playgroud)
我有另一个单调增加值的列表:
list = [1,2,3,4,5,6,7]
Run Code Online (Sandbox Code Playgroud)
我想用taglist长度来创建另一个列表list.如果list有7个项目,我想要一个新的标签列表,如下所示.
newtaglist = ["faint", "shocking", "frosty", "loved", "sadness","faint", "shocking"]
Run Code Online (Sandbox Code Playgroud)
这个列表将继续像圆形填充一样.我怎样才能做到这一点?
已解决:谢谢所有在这篇文章中回答的人.现在我很困惑地选择了答案.:(每个人看起来都很好.虽然我使用的是更简单的一个.
Ray*_*ger 10
最简单的方法是使用专为此特定目的而设计的itertools.cycle.
>>> from itertools import cycle, islice
>>> baselist = [1,2,3,4,5,6,7]
>>> taglist = ["faint", "shocking", "frosty", "loved", "sadness"]
>>> list(islice(cycle(taglist), len(baselist)))
['faint', 'shocking', 'frosty', 'loved', 'sadness', 'faint', 'shocking']
Run Code Online (Sandbox Code Playgroud)
另一种方法是将列表相乘(重复)以使其足够大,然后切掉任何多余的列表:
>>> baselist = [1,2,3,4,5,6,7]
>>> taglist = ["faint", "shocking", "frosty", "loved", "sadness"]
>>> n = len(baselist)
>>> (taglist * -(n // -len(taglist)))[:n]
['faint', 'shocking', 'frosty', 'loved', 'sadness', 'faint', 'shocking']
Run Code Online (Sandbox Code Playgroud)
双重否定用于将底部划分转换为上限划分,只要有剩余部分就会进行舍入.这样可以确保列表乘法始终至少提供所需的元素数量.