【问题标题】:Remove certain instances of item in a list?删除列表中的某些项目实例?
【发布时间】:2016-06-24 16:03:37
【问题描述】:

我正在编写一个代码来计算创建列表中其他部件(例如 2x2 =2 1x1)所需的乐高部件数量,并且我让这部分工作。但是,我还想在此“组合”过程之后返回一个新列表,该过程删除已使用或组合的乐高积木(因此不再可用)。我现在拥有的代码剥离了乐高的所有实例,而不仅仅是“使用”的那些。我想知道是否有办法从列表中删除某个项目乘以一个数字。提前致谢。

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)

【问题讨论】:

  • 如果你有列表中元素的索引,使用somelist.pop(index)。如果你没有索引,并且你不关心相同的部分,你可以使用index = somelist.find(piece); somelist.pop(index)
  • 这似乎仍然会删除列表中的所有乐高实例,而不仅仅是一些。
  • 如何删除所有实例? index 只有一个值,因此只删除一个。你试过了吗?
  • AttributeError: 'list' 对象没有属性 'find'
  • 这可以简单得多。创建一个循环运行q 次,每次处理一个块。这样,如果您在中途用完积木,您将在切换到小块之前尽可能多地使用大块。

标签: python list object reduce instances


【解决方案1】:

您可以使用leglist.remove('2x1') 从列表中删除其中一个部分。

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 2020-03-25
    • 2012-08-18
    • 2021-12-08
    • 1970-01-01
    • 2014-06-25
    • 2019-05-12
    • 2015-06-08
    • 1970-01-01
    相关资源
    最近更新 更多