2017-07-15 102 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]

希望這有助於。