2011-12-19 68 views
24

Nếu độ dài của danh sách python lớn hơn giá trị đã cho (ví dụ 10), thì tôi muốn trích xuất 10 phần tử cuối cùng trong danh sách đó vào danh sách mới. Tôi có thể làm như thế nào? Tôi đã thử nhận được sự khác biệt giữa len (my_list) - 10 và sử dụng nó như: new_list = [(len (my_list) - 10):] không hoạt độngPython - Cách trích xuất các phần tử x cuối cùng từ danh sách

Mọi đề xuất? Cảm ơn trước

+0

"không hoạt động" không phải là mô tả lỗi hợp lệ. – hop

+2

có thể trùng lặp của [Làm thế nào để có được các mục cuối cùng của một danh sách bằng Python?] (Http://stackoverflow.com/questions/646644/how-to-get-last-items-of-a-list-in-python) –

Trả lời

59

nó chỉ đơn giản như:

my_list[-10:] 
+13

Điều quan trọng cần lưu ý là nếu danh sách ban đầu nhỏ hơn 10 phần tử thì giải pháp này sẽ vẫn hoạt động với toàn bộ danh sách. Ví dụ. nếu 'my_list = [1,2,3]', thì 'my_list [-10:]' bằng với '[1,2,3]'. – ovgolovin

12

Điều này cho thấy cách cắt một danh sách dài thành kích thước tối đa và đặt phần còn lại vào danh sách mới. Nó không chính xác những gì bạn đang hỏi về, nhưng nó có thể là những gì bạn thực sự muốn:

>>> 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] 

Đây là giống như những gì bạn đang hỏi về, về cơ bản giống nhau, nhưng lấy danh sách mới từ cuối cùng:

>>> 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] 
>>> 
+0

Đã có hai câu trả lời hay, điều này không thêm nhiều. Xin lỗi vì bỏ phiếu xuống. – Benjamin

+8

@Benjamin: Bỏ qua các sự kiện rằng a) một ví dụ tương tác thực tế có thể rất hữu ích và b) Tôi bắt đầu trả lời câu hỏi này trước khi nhìn thấy các câu trả lời khác, bạn hoàn toàn không hiểu mục đích của việc downvoting trên Stack Overflow. Xin chúc mừng và chúc bạn một ngày tuyệt vời! – dkamins

+1

@Benjamin: P.S. để tham khảo trong tương lai: "Khi nào tôi nên bỏ phiếu? Sử dụng phiếu giảm giá của bạn bất cứ khi nào bạn gặp phải một bài đăng cẩu thả, không tốn công sức, hoặc câu trả lời rõ ràng và có thể là không chính xác." (http: // stackoverflow.com/privileits/vote-down) – dkamins

5

trên thực tế, chỉ số dưới trong báo cáo kết quả của câu hỏi của bạn hoạt động một cách hoàn hảo - bạn có thể dán vào chính xác những gì lỗi hoặc kết quả bất ngờ bạn đang nhìn thấy khi bạn cố gắng sử dụng nó cho mình? Dưới đây là một hoạt động thành công của subscript bạn đề nghị:

>>> my_list = list('abcdefghijklmnop') 
>>> new_list = my_list[(len(my_list) - 10):] 
>>> new_list 
['g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'] 

là vấn đề đơn giản mà bạn đã quên đặt tên my_list trước ký hiệu lát của bạn?

Edit: Như Felix lưu ý, bạn nên tránh các chỉ số từ đi tiêu cực:

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

Và, tất nhiên, là câu trả lời khác lưu ý, chỉ số tiêu cực liên tục thực sự là cách dễ nhất để thực hiện mục tiêu của bạn; nhưng trước tiên tôi muốn tập trung vào lý do tại sao "cách riêng" của bạn để có được mười yếu tố cuối cùng - có ý nghĩa, ngay cả khi nó không tận dụng hết các quy ước của Python liên quan đến các lát cắt - thay vào đó là đưa ra lỗi cho bạn.

+3

Khi độ dài của danh sách là <10. –

+0

ooooh, u là chính xác. Tôi vừa quên my_list: ( – sura

+0

@FelixYan - bạn nói đúng, tôi sẽ sửa lỗi đó! –

Các vấn đề liên quan