python中的复杂列表切片/索引

tur*_*tle 8 python list slice

我有一个如下所示的列表:

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
Run Code Online (Sandbox Code Playgroud)

我想生成一个如下所示的筛选列表:

filtered_lst = [2, 6, 7, 9, 10, 13]
Run Code Online (Sandbox Code Playgroud)

Python是否提供自定义切片的约定.像这样的东西:

lst[1, 5, 6, 8, 9, 12] # slice a list by index
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 16

用途operator.itemgetter():

from operator import itemgetter

itemgetter(1, 5, 6, 8, 9, 12)(lst)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> from operator import itemgetter
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
>>> itemgetter(1, 5, 6, 8, 9, 12)(lst)
(2, 6, 7, 9, 10, 13)
Run Code Online (Sandbox Code Playgroud)

这会返回一个元组; list(itemgetter(...)(lst))如果需要,则转换为列表.

请注意,这相当于切片表达式(lst[start:stop]),其中包含一组索引而不是范围; 它不能用作左侧切片赋值(lst[start:stop] = some_iterable).

  • @DavidHeffernan:'slice'也可能意味着扩展切片(python不支持`list`类型),**允许`[index1,index2,..,indexn]符号.切片表达式的*result*是一个新列表,这就是我认为OP所追求的.:-)*其他*使用切片作为一个赋值目标,这就是我认为你的意思,这在很大程度上超出了范围.我想,只是把我们的术语整理好了!:-) (2认同)

unu*_*tbu 5

Numpy数组有这种切片语法:

In [45]: import numpy as np

In [46]: lst = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])

In [47]: lst[[1, 5, 6, 8, 9, 12]]
Out[47]: array([ 2,  6,  7,  9, 10, 13])
Run Code Online (Sandbox Code Playgroud)