列表中未找到的术语,ValueError:list.index(x):x不在列表中

时间:2015-06-30 18:29:29

标签: python string list

我有一个充满不同材料的记事本,我被要求将它们分类为用户友好的可读语句。

例如,如果我的material_list包含['Wool', 'Cotton'],则会输出'Wool & Cotton'

但如果我的material_list包含['Wool', 'Aloe', 'Fiber'],则会输出'Wool & Aloe Fiber'

我实施此操作有时我会'Silk',但如果我的列表中有'Bamboo''Silk',则表示它是'Bamboo Silk'

当我['Bamboo','Banana','Silk']时,我不必担心这种情况。

# List of all Materials
materials = [
    'Aloe', 'Alpaca', 'Bamboo', 'Banana', 'Cotton',
    'Cowhide', 'Fiber', 'Hemp', 'Jute', 'Lambskin',
    'Leather', 'Linen', 'Paper', 'Polyester', 'Polypropylene',
    'Seagrass', 'Shearling', 'Sheepskin', 'Silk', 'Sisal',
    'Tencel', 'Viscose', 'Wool' , 'Yard'
               ] 

def FindMaterial(toPrint,database):
    material_list = []
    for x in range (0,len(database)):
        if database[x].lower() in toPrint.lower():
            material_list.append(database[x])

    #Special cases for certain combinations of materials
    def SpecialCases(mat1,mat2):
        if mat1 and mat2 in material_list:
            material_list.remove(mat1)
            material_list.remove(mat2)
            material_list.append(mat1+' '+mat2)
    SpecialCases('Aloe','Fiber')
    SpecialCases('Bamboo','Silk')
    SpecialCases('Banana','Silk')   
    SpecialCases('Wool','Sisal')

    if len(material_list) == 1:
        material_string = (material_list[0])
    else:
        material_string = (material_list[0]+' & '+material_list[1])

    return material_string

FindMaterial(sample_input,materials)

sample_input = ['Silk']之类的内容导致ValueError: list.index(x): x not in list

行上的错误material_list.remove(mat1)

'Wool'没有产生任何错误。我知道单独'Fiber''Sisal'单独产生相同的错误,但这两个词永远不会单独出现,只有'Silk'可以。

1 个答案:

答案 0 :(得分:4)

if mat1 and mat2 in material_list:

如果您正在尝试确定mat1和mat2是否都在material_list中,我认为您有错误。试试

if mat1 in material_list and mat2 in material_list: