2016-03-10 73 views
1

我正在研究一個代碼來計算創建其他作品(例如2x2 = 2 1x1)所需的樂高作品的數量,這些作品位於列表中,並且我有這部分工作。然而,我還想在這個「組合」過程中返回一個新列表,該過程去除已使用或組合過的樂高片(因此,不再可用)。我現在的代碼剝離了lego的所有實例,而不是僅僅是'used'的實例。我想知道是否有辦法從列表中刪除某個項目的次數。提前致謝。刪除列表中某些項目的實例?

import hw4_util 
legos = hw4_util.read_legos() 

print 'Current legos',legos 

def lego_work(lego,q,leglist): 
     count=0 
     num1x1= leglist.count('1x1') 
     num2x1= leglist.count('2x1') 
     num2x2= leglist.count('2x2') 
     num4x2= leglist.count('4x2') 
     if lego =='1x1': 
       count = num1x1 
     elif lego == '2x1': 
       if num2x1 == 0: 
         count = (num1x1/2) 
         leglist2= filter(lambda a: a != '1x1', leglist) 
       else: 
         count= num2x1 
         leglist2=filter(lambda a: a != '2x1', leglist) 
     elif lego =='2x2': 
       if num2x2==0 and (num2x1/2) ==0: 
         count = (num1x1/4) 
         leglist2= filter(lambda a: a != '1x1', leglist) 
       elif num2x2==0 and num2x1>0: 
         count= num2x1 
         leglist2= filter(lambda a: a != '2x1', leglist) 
       else: 
         count=num2x2 
         leglist2= filter(lambda a: a != '2x2', leglist) 
     elif lego== '4x2': 
       if num4x2==0 and (num2x2/2) and (num2x1/4)==0: 
         count = (num1x1/8) 
         leglist2= filter(lambda a: a != '1x1', leglist) 
       elif num4x2==0 and num2x2==0 and num2x1>0: 
         count= num2x1 
         leglist2= filter(lambda a: a != '2x1', leglist) 
       elif num4x2==0 and num2x2>0: 
         count=num2x2 
         leglist2= filter(lambda a: a != '2x2', leglist) 
       else: 
         count=num4x2 
         leglist2= filter(lambda a: a != '4x2', leglist) 
     if count>=q: 
       print 'You can use',q,lego,'legos for this.' 
     elif count<q: 
       print " I don't have",q,lego,'legos.' 
     print 
     print 'Current legos:',leglist2 
legotype= raw_input('Type of lego wanted =>') 
print legotype 
quantity= input('Quantity wanted =>') 
print quantity 

print lego_work(legotype,quantity,legos) 
+0

如果您有列表中元素的索引,請使用'somelist.pop(index)'。如果你沒有索引,*和*你不關心相同的部分,你可以使用'index = somelist.find(piece); somelist.pop(指數)'。 – Evert

+0

這似乎仍然會刪除列表中的所有lego實例,而不是僅僅一些。 –

+0

如何刪除所有實例? 'index'只有一個值,因此只能刪除一個值。你有沒有嘗試過? – Evert

回答

0

您可以使用leglist.remove('2x1')以從列表中刪除的部分之一。