Python从列表中删除项目,其中只有部分项目已知

时间:2014-05-09 14:05:15

标签: python

我有这样的事情清单:

My_list = [['A1'],['B2'],['C3']]

我要求用户输入一个LETTER(仅限)来指示要删除的元素。因此,例如,如果用户输入了' B',则应删除第二个条目,列表应如下所示:

My_list = [['A1'],['C3']]

我尝试了几种解决方案,但下面是我最好的尝试......我相信我离最终答案不太远。

My_list = [['A1','B2','C3']]

print('What LETTER pairing would you like to delete?')
get_letter = input()
delete_letter = get_letter.upper()

for each_element in My_list:
    for each_pair in each_element:
        if each_pair[0] == delete_letter:
            location = My_list.index(each_pair)
            clues_list.pop(location)
            print('done')

当我跑步并进入' B'编译错误说......

ValueError: 'B2' is not in list

...但B2列在清单中!

我哪里错了?

2 个答案:

答案 0 :(得分:0)

错误消息是正确的:'B2'My_list ['B2']each_element

您需要删除each_pair,而不是location = None for index, each_element in enumerate(My_list): for each_pair in each_element: if each_pair[0] == delete_letter: location = index break if location is not None: My_list.pop(location) ,并且在迭代列表时不应该删除。{p>例如,尝试:

data = {'A': 1, 'B': 2, 'C': 3}

然而,似乎不同的数据结构对您更有用,例如字典:

if delete_letter in data: 
    del data[delete_letter]

代码变得如此简单:

{{1}}

答案 1 :(得分:0)

你可以用更简洁的方式完成它(使用list comprehension):

My_list = [['A1','B2','C3']]

get_letter = raw_input('What LETTER pairing would you like to delete? ')
delete_letter = get_letter.upper()
print delete_letter
new_list = [var for var in My_list[0] if delete_letter not in var]
print new_list

一些警告:not in会尝试在变量中找到delete_letter ,因此如果您希望它具有更精确的匹配,您可以查看{{1 }}。然后,我的一段代码盲目地跟随你的列表列表。