Nếu mục đích của bạn là làm cho đối tượng mới này hoạt động giống như một danh sách, hãy thực hiện nó gần với danh sách Python thực sự càng tốt bằng cách thừa hưởng hành vi của nó từ lớp list
tích hợp. Sau đó mở rộng lớp học của bạn để thêm hành vi bạn muốn. Đây là một triển khai một phần:
class MaxSizeList[list]:
def __init__[self, maxlen]:
self._maxlen = maxlen
def append[self, element]:
self.__delitem__[slice[0, len[self] == self._maxlen]]
super[MaxSizeList, self].append[element]
a = MaxSizeList[3]
print[a]
a.append["hey"]
print[a]
a.append["hi"]
print[a]
a.append["let's"]
print[a]
a.append["go"]
print[a]
Output:
[]
['hey']
['hey', 'hi']
['hey', 'hi', "let's"]
['hi', "let's", 'go']
Bây giờ, tại sao tôi nói rằng đây là một triển khai "một phần"? Bởi vì có nhiều cách để thêm các yếu tố vào một danh sách. Ví dụ: nếu bạn thêm các dòng này vào cuối tập lệnh trên:
a.extend[["some", "more", "stuff"]]
print[a]
Bạn sẽ thấy đầu ra này ở cuối:
['hi', "let's", 'go', 'some', 'more', 'stuff']
Ối. Công việc của bạn không được thực hiện. Chúng tôi đã ghi đè phương thức append
, nhưng không phải là phương thức extend
. Và có những người khác, như __setslice__
, __mul__
, v.v.
Về cơ bản, để tạo ra một triển khai hoàn chỉnh, bạn phải mở rộng lớp của mình để cung cấp các triển khai cho mọi phương thức tích hợp của lớp list
có thể mở rộng độ dài của danh sách. Thực hiện
[]
['hey']
['hey', 'hi']
['hey', 'hi', "let's"]
['hi', "let's", 'go']
1 để xem tất cả các phương pháp "ma thuật" tích hợp của nó và tìm ra phương pháp nào bạn cần mở rộng. Hàm Max [] - Tìm phần tử lớn nhất của danh sách. Trong Python, có một hàm tích hợp tối đa [] bạn có thể sử dụng để tìm số lớn nhất trong danh sách. Để sử dụng nó, hãy gọi Max [] trên danh sách các số. Sau đó, nó trả về số lớn nhất trong danh sách đó.
Câu trả lời được đề xuất
Chào Bumsfeld,
Tôi tin rằng cấu trúc dữ liệu mảng trong gói số/numpy vừa được đánh máy vừa không thể chống lại, giống như các mảng C [thực tế, tôi khá chắc chắn rằng các cấu trúc dữ liệu này là mảng C đội mũ python]. Thủ tục thanh toán:
//numeric.scipy.org
Nhảy để đăng
Cảm ơn G-Do cho thông tin của bạn, vì vậy Numpy cuối cùng đã thay thế Numeric và Numarray. Thú vị!
//numeric.scipy.org
Nhảy để đăng
Cảm ơn G-Do cho thông tin của bạn, vì vậy Numpy cuối cùng đã thay thế Numeric và Numarray. Thú vị! 19 Junior Poster Câu trả lời được đề xuất Chào Bumsfeld, Tôi tin rằng cấu trúc dữ liệu mảng trong gói số/numpy vừa được đánh máy vừa không thể chống lại, giống như các mảng C [thực tế, tôi khá chắc chắn rằng các cấu trúc dữ liệu này là mảng C đội mũ python]. Thủ tục thanh toán:
Vegaseat1.735 đồng nghiệp của Đội đạo đức giả của Daniweb 1,735 DaniWeb's Hypocrite
Team Colleague Nhảy để đăng Cảm ơn G-Do cho thông tin của bạn, vì vậy Numpy cuối cùng đã thay thế Numeric và Numarray. Thú vị!
Khi tôi mã hóa trong C, tôi đã sử dụng lấy mẫu dữ liệu phòng thí nghiệm và đặt nó vào bộ đệm tròn hoặc vòng để giữ cho thứ đó không bị tràn. Đây là một cách dễ dàng để tính toán một di chuyển
Tất cả 5 câu trả lời
# the equivalent of a circular size limited list
# also known as ring buffer, pops the oldest data item
# to make room for newest data item when max size is reached
# uses the double ended queue available in Python24
from collections import deque
class RingBuffer[deque]:
"""
inherits deque, pops the oldest data to make room
for the newest data when size is reached
"""
def __init__[self, size]:
deque.__init__[self]
self.size = size
def full_append[self, item]:
deque.append[self, item]
# full, pop the oldest item, left most item
self.popleft[]
def append[self, item]:
deque.append[self, item]
# max size reached, append becomes full_append
if len[self] == self.size:
self.append = self.full_append
def get[self]:
"""returns a list of size items [newest items]"""
return list[self]
# testing
if __name__ == '__main__':
size = 5
ring = RingBuffer[size]
for x in range[9]:
ring.append[x]
print ring.get[] # test
"""
notice that the left most item is popped to make room
result =
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]
[4, 5, 6, 7, 8]
"""
G-DO19 Poster Junior 413 Nearly a Posting Virtuoso
Khi tôi mã hóa trong C, tôi đã sử dụng lấy mẫu dữ liệu phòng thí nghiệm và đặt nó vào bộ đệm tròn hoặc vòng để giữ cho thứ đó không bị tràn. Đây là một cách dễ dàng để tính toán một di chuyển Tất cả 5 câu trả lời
I guess the answer is yes.
15 năm trước
Tại sao không phải là một cái gì đó như:
Nếu Len [Mylist]> 5: ... Del Mylist [0]
...del mylist[0]
Vegaseat1.735 đồng nghiệp của Đội đạo đức giả của Daniweb 1,735 DaniWeb's Hypocrite Team Colleague
15 năm trướcTại sao không phải là một cái gì đó như:
Nếu Len [Mylist]> 5: ... Del Mylist [0]
...del mylist[0]
Vegaseat1.735 đồng nghiệp của Đội đạo đức giả của Daniweb
Ý tưởng tốt, nhưng nếu Mylist được thêm vào ở một số nơi khác nhau trong mã của bạn so với nó sẽ không thực tế.
Trả lời chủ đề này
Là một phần của cộng đồng Daniweb