2017-07-15 104 views
1

这是相当简单的阐述问题,但我不是100%确定我有我的行话是正确的。尽管如此,从概念上来说,“樱桃采摘”适合描述我想要的切片。这是因为我只想访问(从所有元素中挑选樱桃)列表中的两个远端元素。我尝试这样做:列表樱桃采摘切片方法

my_list[2,7] 

所以我期待它返回只有2个元素,而是我得到了错误:

list indices must be integers, not tuples.

我搜索这个错误,但我发现它实际上是一个非常普遍的错误和没有任何煽动这个错误的问题实际上是我的问题类型。

我想我可以一次提取元素1并合并它们,但是我的直觉告诉我有更多“pythonic”的方法。

而且这个问题我遇到了从列表中的现有列表建立一个新的列表的形式稍微复杂:

new_list = [] 
for i in range(len(my_list)): 
    new_list.append(my_list[i][2,7]) 
+2

一次提取一个元素。不需要使这种简单而快速的操作复杂化。 –

+0

@JimFasarakisHilliard事实上,事后看来,这个例子太简单了。我列举了另一个我碰到的同样问题的例子。 –

+0

如果我理解,请使用步骤切片? 'my_list [2,8,5]' –

回答

3

通常我只想用operator.itemgetter此:

>>> my_list = list(range(10)) 
>>> import operator 
>>> list(operator.itemgetter(2, 7)(my_list)) 
[2, 7] 

它也允许通过索引得到列表中元素的任意量。


然而,你可以随时使用NumPy的(这是一个外部封装),它是整数切片这个(但它不会对正常的Python工作list S,只为NumPy的数组):

>>> import numpy as np 
>>> my_arr = np.array(my_list) 
>>> my_arr[[2, 7]] 
array([2, 7]) 
1
In [1]: myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
In [2]: myList[2:8:5] 
Out[2]: [2, 7] 

myList[start:end:stride]

希望这有助于。