首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每n个n-2的Python列表切片

每n个n-2的Python列表切片
EN

Stack Overflow用户
提问于 2018-06-16 03:40:07
回答 4查看 109关注 0票数 2

如果我有一个列表test

代码语言:javascript
复制
test = [i for i in range(20)]
print(test)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

我想要每5个数字得到最后3个数字,这样我就可以得到一个列表,如下所示:

代码语言:javascript
复制
[2, 3, 4, 7, 8, 9, 12, 13, 14, 17, 18, 19]

有没有办法通过列表切片来做到这一点呢?我可以用模函数来做这件事,比如

代码语言:javascript
复制
[i for i in test if i % 5 > 1]

但是我想知道是否有一种方法可以通过列表切片来做到这一点?谢谢

EN

回答 4

Stack Overflow用户

发布于 2018-06-16 03:44:36

使用filter函数:

代码语言:javascript
复制
list(filter(lambda x: x % 5 > 1, test))  # [2, 3, 4, 7, 8, 9, 12, 13, 14, 17, 18, 19]
票数 3
EN

Stack Overflow用户

发布于 2018-06-16 03:59:02

如果顺序无关紧要,您可以尝试以下操作:

代码语言:javascript
复制
test[2::5] + test[3::5] + test[4::5]

或者更一般地说

代码语言:javascript
复制
 start = 2 #Number of indices to skip
 n = 5
 new_test = []
 while start < 5:
     b.extend(test[start::n])
     start += 1
票数 1
EN

Stack Overflow用户

发布于 2018-06-16 04:23:35

是的,但我非常怀疑它是否会比简单的列表理解更快:

代码语言:javascript
复制
from itertools import chain, zip_longest as zipl

def offset_modulo(l, x, n):
    sentinel = object()
    slices = (l[i::n] for i in range(x, n))
    iterable = chain.from_iterable(zipl(*slices, fillvalue=sentinel))
    return list(filter(lambda x: x is not sentinel, iterable))

print(offset_modulo(range(20), 2, 5))
# [2, 3, 4, 7, 8, 9, 12, 13, 14, 17, 18, 19]
print(offset_modulo(range(24), 2, 5))
# [2, 3, 4, 7, 8, 9, 12, 13, 14, 17, 18, 19, 22, 23]

基本上,这种方法获得表示每个索引i的列表切片,以便i % n >= x。然后,它使用zipchain将它们展平到输出中。

编辑:

更简单的方法

代码语言:javascript
复制
def offset(l, x, n):
    diff = n-x
    slices = (l[i:i+diff] for i in range(x, len(l), n))
    return list(chain.from_iterable(slices))

offset(range(20), 2, 5)
# [2, 3, 4, 7, 8, 9, 12, 13, 14, 17, 18, 19]
offset(range(24), 2, 5)
# [2, 3, 4, 7, 8, 9, 12, 13, 14, 17, 18, 19, 22, 23]

在那里我们得到我们想要的相邻元素的切片,然后将它们chain在一起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50881755

复制
相关文章

相似问题

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