天天看點

python 提取清單元素_關于Python:Python-如何從清單中提取最後x個元素

本問題已經有最佳答案,請猛點這裡通路。

如果python清單的長度大于給定值(例如10),那麼我想将該清單中的最後10個元素提取到新清單中。

我怎樣才能做到這一點?

我試圖得到len(my_list)-10之間的差別,并将其用作:new_list = [(len(my_list)-10):]不起作用

有什麼建議麼?

提前緻謝

"不起作用"不是有效的故障描述。

就像這樣簡單:

1my_list[-10:]

仍然必須提及的是,如果初始清單少于10個元素,則此解決方案仍然可以産生整個清單。例如。如果my_list = [1,2,3],則my_list[-10:]等于[1,2,3]。

這顯示了如何将長清單切成最大大小,然後将其餘的放入新清單中。這并不是您要問的,但可能正是您真正想要的:

1

2

3

4

5

6

7

8>>> list1 = [10, 20, 30, 40, 50, 60, 70]

>>> max_size = 5

>>> list2 = list1[max_size:]

>>> list2

[60, 70]

>>> list1 = list1[:max_size]

>>> list1

[10, 20, 30, 40, 50]

這更像是您要詢問的内容,基本上是相同的,但是從頭開始采用新清單:

1

2

3

4

5

6

7

8

9

10

11>>> list1 = [10, 20, 30, 40, 50, 60, 70]

>>> list2 = list1[:max_size]

>>> list2

[10, 20, 30, 40, 50]

>>> list2 = list1[-max_size:]

>>> list2

[30, 40, 50, 60, 70]

>>> list1 = list1[:-max_size]

>>> list1

[10, 20]

>>>

已經有兩個很好的答案,這并沒有增加太多。對不起,投下反對票。

@Benjamin:撇開以下事實:a)一個實際的互動式示例可能會非常有幫助,并且b)在看到其他答案之前我已經開始回答這個問題,您完全無法了解在Stack Overflow上投票的目的。恭喜,祝你有美好的一天!

@Benjamin:附言供将來參考:"我什麼時候應該投反對票?每當遇到馬虎,不費力氣的文章,或者答案顯然是錯誤的或可能是危險的錯誤時,請使用不贊成投票的方式。" (stackoverflow.com/privileges/vote-down)

供将來參考:人們出于不同原因使用否決票,上文已提及。如果答案是正确的,我的不贊成票将被反對票數反對

也許有一些不贊成投票的徽章,是以本傑明這樣做了。 :) @dkamins不必為此擔心。他得到-1代表負票(除了您的-2)。

Python教程有一節介紹如何使用清單切片:http://docs.python.org/tutorial/introduction.html#lists

就您而言,這就像編寫代碼一樣簡單:

1new_list = my_list[-10:]

這應該是公認的答案。

實際上,您的問題陳述中的下标可以完美地工作-您是否可以準确粘貼自己嘗試使用時看到的錯誤或意外結果?這是您建議的下标的成功運作:

1

2

3

4>>> my_list = list('abcdefghijklmnop')

>>> new_list = my_list[(len(my_list) - 10):]

>>> new_list

['g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']

問題僅僅是因為您忘記了在切片符号前面命名my_list嗎?

編輯:正如Felix指出的那樣,您應該防止索引變為負數:

1my_list[max(0, len(my_list) - 10):]

而且,當然,正如其他答案所指出的那樣,恒定的負索引實際上是實作目标的最簡單方法。但是我想首先關注為什麼擷取最後十個元素的"自己的方式"(即使沒有充分利用Python關于切片的約定也很有意義)卻給您一個錯誤。

當他的清單長度小于10時。

哦,你是正确的。我剛剛忘記了my_list :(

@FelixYan —你是對的,我會解決的!

無需防範負片邊界。

@hop —是的,有。例如,如果他的清單長度為9,則索引将變成-1,這隻會給他從清單末尾開始的一個單元素切片,而不是他實際上想要的9個元素(假設,如果他拿不到十,他想"盡可能接近十")。

對不起,我還不夠清楚。如果您一開始就做對就不會有問題。本教程中提供了擷取清單的最後n個元素的正确切片。

@hop —啊,是的,我了解你!您說得很對:如果他使用Python正常方法擷取了最後n個元素,那麼減法或溢出都沒有問題。而且,令人高興的是,有幾個問題忽略了他的問題-"為什麼不起作用?"-相反,很恰當地回答了"為什麼我不應該首先進行這項工作?"的問題:)我隻是想跳進去,然後幫助他了解為什麼沒有使用文法,以便他了解清單名稱必須在切片符号之前。