繁体   English   中英

为索引范围内的每个项目创建长度为 n 的子列表

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

有没有更优雅的方法来做到这一点,例如使用itertoolszip

我会计算子列表的最小/最大起始索引,而不是走得太远(和过滤)或走得不够远(和遗漏一些东西:):

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM