2011-01-29 30 views

Trả lời

58

Để chỉnh sửa danh sách tại chỗ (chứ không phải tạo một bản sao ngắn danh sách), sử dụng:

del l[100:] 
+1

+1 Hoàn toàn quên 'del' hoạt động với lát cắt. – delnan

+3

cắt bằng [: 100] thường là giải pháp tốt hơn vì nó có hiệu suất không đổi, nhưng del [100:] trở nên chậm hơn cho danh sách lớn hơn. – kefeizhou

+2

kefeizhou: Điều đó có thể phụ thuộc vào những gì bạn thực sự muốn. Nếu bạn thực sự không cần các mục vượt quá 100 đầu tiên nữa, bạn nên xóa chúng.Nói rằng nó thường là một ý tưởng tốt hơn để giữ cho chúng nằm xung quanh bởi vì điều này mất ít thời gian hơn xóa chúng có vẻ lạ lý do với tôi. –

13

Bạn có thể sử dụng danh sách cắt:

a = a[0:100] 
+1

Và nếu bạn hoàn toàn khăng khăng giải phóng phần còn lại chưa sử dụng: del a [100:] – Confusion

+6

@Confusion: phần còn lại được thu gom rác tự động nếu 'a' là tham chiếu duy nhất trong danh sách. –

0

Bạn có thể làm một cái gì đó như:

truncated = list[:100] 
4

Các items[:100] khác được đề cập mang đến cho bạn một danh sách mới, trong đó có 100 hạng mục đầu tiên của items. Nếu bạn muốn sửa đổi danh sách tại chỗ, hoặc sử dụng items[:] = items[:100] (phân bổ lát) hoặc while len(items) > 100: items.pop() sử dụng del items[100:] theo đề xuất của Ned Batchelder.

1

Bạn có thể sử dụng cắt nếu bạn không nhớ chỉ đơn giản là tạo ra một bản sao mới của danh sách chỉ chứa các phần tử bạn muốn ... tuy nhiên, điều này sẽ không được sửa đổi.

>>> a = [0,1,2,3,4,5,6,7,8,9] 
>>> b = a[0:5] 
>>> a 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> b 
[0, 1, 2, 3, 4] 

Nếu bạn thực sự muốn cắt ngắn danh sách ban đầu, chỉ cần xóa các yếu tố bạn không muốn bằng cách sử dụng cắt với del

>>> del a[5:] 
>>> a 
[0, 1, 2, 3, 4] 
1

Câu trả lời đúng là, tất nhiên:

>>> x = range(10) 
>>> x 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> x = x[:5] 
>>> x 
[0, 1, 2, 3, 4] 

Nhưng quan trọng là nếu bạn quan tâm đến các giá trị trên 100 và muốn kéo từng cái một vì bất kỳ lý do nào, bạn cũng có thể sử dụng POP()

>>> x = range(10) 
>>> x 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> x.pop() 
9 
>>> x 
[0, 1, 2, 3, 4, 5, 6, 7, 8] 

Bạn thậm chí có thể xác định những yếu tố để kéo ra:

>>> x= range(10,20) 
>>> x 
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 
>>> x.pop(3) 
13 
>>> x.pop() 
19 
>>> x 
[10, 11, 12, 14, 15, 16, 17, 18] 
>>> x.pop(-1) 
18 
[10, 11, 12, 14, 15, 16, 17] 

này loại bỏ các yếu tố cá nhân, rút ​​ngắn danh sách, mà không sao chép.

Vì vậy, một câu trả lời ngớ ngẩn và yucky (nhưng cũng đúng) sẽ được lặp lại. Tôi chỉ đi xuống 12-8 để dễ đọc ở đây:

>>> x=range(12) 
>>> for i in range(len(x), 8, -1): 
...  y = x.pop() 
...  print "popping x: ", y, ", x=", x 
... 
popping x: 11 , x= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
popping x: 10 , x= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
popping x: 9 , x= [0, 1, 2, 3, 4, 5, 6, 7, 8] 
popping x: 8 , x= [0, 1, 2, 3, 4, 5, 6, 7] 

Chắc chắn, nó không phải là tối ưu, nhưng tôi chỉ chạy vào một tình huống mà tôi cần thiết này vì vậy tôi nghĩ rằng tôi muốn chia sẻ nó ở đây (Tôi đang cắt ngắn danh sách khi tôi thấy giá trị không phải là Không có đầu tiên).

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