从列表理解中返回切片

Posted

技术标签:

【中文标题】从列表理解中返回切片【英文标题】:Return slice from list comprehension 【发布时间】:2021-10-07 20:02:46 【问题描述】:

从列表理解返回切片的(单行)语法是什么? 例如:

def foo(iterable):
    ls = [_ for _ in iterable]
    return ls[1:]

【问题讨论】:

list(iterable) 应该等同于您的for generator。 Lambda 是函数的一种替代方案。但你可以做 list(iterable)[1:] 完全不清楚你在问什么......你似乎已经有了答案。 itertools.islice 是为任何可迭代对象获取切片的最通用解决方案。 同意之前的评论。 _ 对 Python 程序员来说意味着“我可以完全忽略这个值”,而不是“我懒得给它起名字,但它的值很重要”。使用xi 之类的。 itertools.islice(iterator, 1, None) 删除迭代器的第一个元素。如果您希望将答案作为一个列表,请将其包装在 list(...) 中,或者将其保留为迭代器。 【参考方案1】:

为什么不能简单地对列表理解进行切片?

def foo(iterable):
    return [_ for _ in iterable][1:]

【讨论】:

【参考方案2】:

在你的情况下,你可以:

list(iterable)[2:] 

但你也可以:

[ i for i in range(10)][2:]

out[1] [2, 3, 4, 5, 6, 7, 8, 9]

只是一些其他的技巧,从头开始切片:

[ i for i in range(10)][-2:]

out[2] [8, 9]

条件列表理解:

[ i for i in range(10) if i%2==0]
out[3] [0, 2, 4, 6, 8]

【讨论】:

以上是关于从列表理解中返回切片的主要内容,如果未能解决你的问题,请参考以下文章

python中切片的理解

替换列表中的元素,无需列表理解、切片或使用 []s

关于python列表(list)切片[start:stop:step]的理解

python切片(获取一个子列表(数组))

切片整个列表的切片赋值和直接赋值有啥区别?

字符串处理之下标和切片