簡體   English   中英

如何從列表創建給定長度的循環列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM