2015-02-18 16 views
6

Có cách nào để tạo ra một "lát cắt" của một chuỗi trong Python 3 hoạt động giống như một lát thông thường nhưng không tạo ra một bản sao của phần cắt lát của chuỗi? Khi chuỗi gốc được cập nhật, "chế độ xem lát cắt" sẽ phản ánh bản cập nhật.Trăn lát không có bản sao?

>>> l = list(range(100)) 
>>> s = Slice(l, 1, 50, 3) # Should behave like l[1:50:3] 
>>> s[1] 
4 
>>> l[4] = 'foo' 
>>> s[1] # Should reflect the updated value 
'foo' 

Tôi có thể viết riêng lớp học này nhưng tôi muốn tìm hiểu xem có cách tích hợp hay không.

+1

Related - http://stackoverflow.com/questions/3485475/can-i-create-a-view-on-a-python-list Không chắc chắn có điều gì đó không đi vào trong trong những năm căng thẳng, vì vậy không bỏ phiếu để đóng như là một bản sao :-) –

+0

Bạn có thể chỉ định câu trả lời nào bạn mong đợi khác hơn là được cung cấp trong câu hỏi được liên kết: custom Slice class, numpy, memoryview, generator (iterator)? – jfs

Trả lời

2

Sử dụng islice từ itertools thư viện

EDIT:

tôi nhìn thấy nơi tôi hiểu lầm câu hỏi. Vâng, không có điều gì như vậy. Nếu bạn muốn tạo lớp học của bạn, bạn sẽ phải:

  1. Giữ một tham chiếu đến danh sách ban đầu trong bạn Slice lớp
  2. Xác định, __iter__, __getitem____setitem__ phương pháp để làm việc trên danh sách gốc với chuyển đổi chỉ mục
+1

'islice' không thực sự tạo ra một chuỗi có thể lập chỉ mục - bạn cần phải hiện thực hóa trình vòng lặp, tại thời điểm đó nó sẽ không còn là một khung nhìn vào trình tự cơ bản, mà đúng hơn là trình tự riêng của nó. –

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