![](/img/trans.png)
[英]Python: Generating all n-length arrays combinations of values within a range
[英]Making n-length sublists for every item within reach of an index
假设我有一个列表l = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
和一个给定的元素e = 'b'
我想从距离我们的元素(包括元素)不超过3
位置的元素创建 3 长度的子列表。 我们希望为我们的示例生成以下结果:
[['a', 'b', 'c'], ['b', 'c', 'd']]
如您所见,它不能 go 更靠左,因为元素的 position 小于 reach,它一直延伸到右侧的元素'd'
(索引4
)。
这是我的本地解决方案:
l = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
n = len(l)
reach = 3
e = 'b'
idx = l.index(e)
result = []
for i in range(reach):
lb, rb = idx - i, idx - i + reach
if lb >= 0:
result.append(l[lb:rb])
有没有更优雅的方法来做到这一点,例如使用itertools
或zip
?
我会计算子列表的最小/最大起始索引,而不是走得太远(和过滤)或走得不够远(和遗漏一些东西:):
idx = l.index(e)
min_start = max(idx - reach + 1, 0)
max_start = min(idx, n - reach)
result = [l[i:i+reach] for i in range(min_start, max_start + 1)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.