2014-05-09 41 views
1

我有這樣的事情的清單列表中刪除項。因此,舉例來說,如果用戶輸入「B」,第二項應被刪除,名單應該是這樣的:Python從那裏唯一的項目的一部分,被稱爲

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是清單!

我哪裏錯了?

+3

請注意'My_list'是列表的列表,而不是字符串列表。 –

+0

另外,你爲什麼將A與1配對,B與2等?那有什麼意義呢? – acushner

回答

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) 

但是,看起來有可能不同的數據結構對您更有用,例如,字典:

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

其中代碼變得簡單:

if delete_letter in data: 
    del data[delete_letter] 
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,因此如果您希望它具有更精確的匹配y你可以看看.startswith。然後,我的一段代碼會盲目地跟在列表的列表中。

+0

raw_input與input()相比有什麼區別? – user3396486

+0

答案是[這裏](http://stackoverflow.com/questions/4915361/whats-the-difference-between-raw-input-and-input-in-python3-x):)還包含有關Python 2的答案。 – favoretti

+0

@ user3396486:如果您使用的是Python 3(您的'print'語法建議),主要區別在於'raw_input'會給你一個NameError,這裏的'print'是語法錯誤... – geoffspear

相關問題