2013-11-29 88 views
1

我想要一個固定長度的類列表容器,它應該有一個可以用來排序的排序()函數,我認爲還應該有一個函數我可以用它來檢測它中的項目數量是否達到容器的長度,因爲如果它中的項目數量達到容器的長度(固定),我想處理其中的數據。是否存在Python中的容器是這樣的嗎?如果不是,應該使用什麼基礎容器來實現這樣的容器?如何實現具有排序功能的隊列式容器

容器類似於排隊,但排隊不具有某種功能

+0

總而言之,我想先填充容器,然後對其進行分類並處理其中的所有內容 – iMath

+0

是否有任何理由基本列表不符合您的需求?您可以在寫入時測試列表的長度。 –

+0

它應該是什麼樣的「隊列」? –

回答

0

你可以讓你自己的容器類,如果你想要的。以下是一個非常簡單的示例,可能會指出您正確的方向。

class MyContainer: 
    def __init__(self, size, key=None, func=None): 
     self.size = size 
     self.items = [] 
     self.key = key 
     self.func = func 

    def add_item(self, item): 
     if not self.is_full(): 
      self.items.append(item) 
     else: 
      # Handle cases where the container is full, by raising an exception 
      # or printing an error message 
      #raise Exception('The container is full') 
      print("Container is full") 
      return 
     if len(self.items) == self.size: 
      self.sort_items(self.key) 
      self.process_items(self.sort) 

    def is_full(self): 
     return len(self.items) >= self.size 

    def sort_items(self, key): 
     self.items = sorted(self.items, key=key) 

    def process_items(self, func): 
     self.items = map(func, self.items) 

調用帶有key=lamba x: len(x)func=str.lower此功能將排序取決於您的物品的長度名單和所有字符串轉換爲小寫。

>> c = MyContainer(3, key=lambda x: len(x), func=str.lower) 
>> c.add_item('a') 
>> c.add_item('aBcD') 
>> c.add_item('ab') 
>> print(c.items) 

['a', 'ab', 'abcd'] 
+0

感謝您的出色工作!但是我發現隊列也可以用在這種情況下,>>> import queue >>> a = queue.Queue(10) >>> a.put(「 (「q」) >>> a.put(「zxcv」) >>> a.put(「1234」) >>>已排序['1234','asdf','qwer','zxcv'] – iMath

0

聽起來像是PriorityQueue符合規範。這允許項目被添加到任何順序排隊(最多),但隨後就被帶到關在有序的隊列:

import queue, random 

items = list(range(15)) 
random.shuffle(items) 

pq = queue.PriorityQueue(5) 

while items: 
    pq.put_nowait(items.pop()) 
    if pq.full(): 
     print('processing...') 
     while not pq.empty(): 
      print(pq.get_nowait()) 
     print() 

輸出:

processing... 
0 
4 
5 
8 
14 

processing... 
1 
2 
10 
11 
13 

processing... 
3 
6 
7 
9 
12