本問題已經有最佳答案,請猛點這裡通路。
如果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個元素,那麼減法或溢出都沒有問題。而且,令人高興的是,有幾個問題忽略了他的問題-"為什麼不起作用?"-相反,很恰當地回答了"為什麼我不應該首先進行這項工作?"的問題:)我隻是想跳進去,然後幫助他了解為什麼沒有使用文法,以便他了解清單名稱必須在切片符号之前。