首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python生成带有偏移量和条件的子列表

python生成带有偏移量和条件的子列表
EN

Stack Overflow用户
提问于 2014-06-20 13:04:33
回答 3查看 1.5K关注 0票数 1

嘿,我在试着生成一个列表的子列表。例如,我有一个这样的列表:

l = [1,2,3,4,5,6,7,8,9,10,11,12]

我想把它们分割成长度为4的子列表。但是,第一个元素与前一个列表中的最后一个元素相同,就像我说的那样,它的长度必须是4。

代码语言:javascript
复制
l1 = [1,2,3,4]
l2 = [4,5,6,7]
l3 = [7,8,9,10] 
l4 = [10, 11, 12] <-- should be ignored

有人有主意吗?!我在想一台发电机但我不太确定。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-20 13:14:08

一个简单但灵活的生成器实现:

代码语言:javascript
复制
def overlapping_sublists(l, n, overlap=1, start=0):          
    while start <= len(l) - n:
        yield l[start:start+n]
        start += n - overlap

示例用法:

代码语言:javascript
复制
>>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> list(overlapping_sublists(l, 4))
[[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]]
>>> list(overlapping_sublists(l, 4, 2, 3))
[[4, 5, 6, 7], [6, 7, 8, 9], [8, 9, 10, 11]]
票数 4
EN

Stack Overflow用户

发布于 2014-06-20 13:09:21

代码语言:javascript
复制
a = []
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
for i in range(0, len(l)-3, 3):
    a.append(l[i:i+4])

会给a = [[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]]

或者你可以用它来理解列表:

代码语言:javascript
复制
[l[i:i+4] for i in range(0, len(l)-3, 3)]
票数 4
EN

Stack Overflow用户

发布于 2014-06-20 13:09:11

代码语言:javascript
复制
print([l[i:i+4] for i in range(0, len(l), 3)])

输出:

代码语言:javascript
复制
[[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10], [10, 11, 12]]

只有长度4的子列表:

代码语言:javascript
复制
print([m for m in [l[i:i+4] for i in range(0, len(l), 3)] if len(m) == 4])

输出:

代码语言:javascript
复制
[[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]]

使用发电机:

代码语言:javascript
复制
for n in (m for m in (l[i:i+4] for i in range(0, len(l), 3)) if len(m) == 4):
    print(n)

输出:

代码语言:javascript
复制
[1, 2, 3, 4]
[4, 5, 6, 7]
[7, 8, 9, 10]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24327964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档