想象一下,您有一个元素列表的情况,例如:arr = ["h4", "p", "p", "h4", "p", "p", "p"]
和h4
值所在的索引列表是:idx = [0, 3]
。我的目标是打印出这些索引之间的值,因此输出将是:[["p", "p"], ["p", "p", "p"]]
。换句话说,我想打印arr[0:3]和arr[3:],但我想使其动态,例如使用另一个数组CCD_ 5,idx2 = [0, 3, 7]
输出将是:[["p", "p"], ["p", "p", "p"], ["p"]]
(即arr2[0:3]
、arr[3:7]
、arr[7:]
(。
在任何情况下,h4
值都将始终位于索引0处。
我不知道是否有人问过类似的问题,因为我找不到,也不知道是否可以这样做。也许类似的任务在leetcode上,如果有人知道什么,请告诉我。
通过使用itertools
包中的groupby
函数,您可以根据自定义条件lambda term: term == 'p'
对列表的术语进行分组。有关详细信息,请参阅文档。
import itertools as it
a = ["h4", "p", "p", "h4", "p", "p", "p", "h4", "p"]
grouped = [list(grp) for match, grp in it.groupby(a, lambda term: term == 'p') if match]
print(grouped)
输出
[['p', 'p'], ['p', 'p', 'p'], ['p']]