[英]How to create a circular list of a given length from a list
我需要一個循環列表。 我有 5 個標簽的列表:
taglist = ["faint", "shocking", "frosty", "loved", "sadness"]
我有另一個值單調遞增的列表:
list = [1,2,3,4,5,6,7]
我想按 list 的長度使用taglist
創建另一個list
。 如果list
有 7 個項目,我想要一個新的標簽列表,如下所示。
newtaglist = ["faint", "shocking", "frosty", "loved", "sadness","faint", "shocking"]
這個列表將像循環填充一樣繼續下去。 我怎樣才能做到這一點?
最簡單的方法是使用專為此特定目的而設計的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']
另一種方法是乘以(重復)列表以使其足夠大,然后切掉多余的部分:
>>> 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']
雙重否定用於將下限除法轉換為上限除法,只要有余數就四舍五入。 這確保列表乘法總是至少給出所需數量的元素。
另外,在 python list
是內置函數,不要使用list
作為變量名。
taglist = ["faint", "shocking", "frosty", "loved", "sadness"]
print(len(taglist))
list_ = [1,2,3,4,5,6,7]
print(len(list_))
diff = len(list_) - len(taglist)
for i in range(0, diff):
taglist.append(taglist[i])
print(taglist)
可以使用模運算符生成newtaglist
以確保索引在范圍內
taglist = ["faint", "shocking", "frosty", "loved", "sadness"]
num_list = [1,2,3,4,5,6,7]
newtaglist = [taglist[i % len(taglist)] for i in xrange(len(num_list))]
產量:
['faint', 'shocking', 'frosty', 'loved', 'sadness', 'faint', 'shocking']
在這里運行
其中 n 是所需的長度:
[taglist[i % len(taglist)] for i in range(n)]
或者你可以使用 Raymond 的建議
from itertools import cycle
infiniteTagList = cycle(taglist)
[next(infiniteTagList) for i in range(n)]
乘加切片:
>>> taglist = ['a', 'b', 'c', 'd', 'e']
>>> length = 13
>>>
>>> q, r = divmod(length, len(taglist))
>>> taglist * q + taglist[:r]
['a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.