2013-02-22 71 views
0

我想要的是:我希望列表q只出現三次。當它出現時,系統會提示您選擇其中一個列表項。每次選擇一個示例時,我都希望它消失並且無法再次被選中 - 我甚至不希望選擇它來顯示。因此,當選擇示例1時,它會顯示列表中的示例2和3。然後,例如選擇下面的示例3--該列表應該只顯示在此之後的示例2。相反,它會同時顯示1和2,即使先前已刪除1。真的,真的從Python中的循環列表中刪除一個項目

所以問題在於該項目在刪除時不會永久地從列表中刪除,並且會在下一次打印時返回,這是我不想要的。

for x in range(0,3): 
    q = ['example 1', 'example 2', 'example 3'] 
    select = raw_input("> ") 
    if select == "1": 
     del q[0] 
     print q 
    if select == "2": 
     del q[1] 
     print q 
    if select == "3": 
     del q[2] 
     print q 

好像有很多的關於Python從列表中刪除的東西的問題,但我一直在尋找一個天一個答案,並沒有發現什麼卻爲我的特殊情況下工作。對不起,任何愚蠢的事情,我一直在學習編程只有一個月。

+0

格式化您的代碼。 – myusuf3 2013-02-22 03:01:53

+3

我不知道python,但我認爲你應該啓動for循環之外的列表。 – smk 2013-02-22 03:02:17

+1

第一次運行循環後,您的索引將會出錯;如果我第一次選擇'example 1',那麼'example 2'現在將在'q [0]'中,等等。 – Eevee 2013-02-22 03:06:26

回答

7

您當前的代碼如此行爲的原因是因爲列表'q'每次都被初始化。那麼你刪除名單的方式也是錯誤的。

您的複製/刪除語義是指Python中的深度複製概念,這裏不適用。

你想在Python中使用字典類型。

def Foo(): 
    q = {1:'example 1', 2:'example 2', 3:'example 3'}; 
    for x in range(0,3): 
     select = raw_input("> ") 
     if select == "1": 
      del q[1] 
      print q 
     if select == "2": 
      del q[2] 
      print q 
     if select == "3": 
      del q[3] 
      print q 

和更簡潔

def foo(): 
    q = {1:'example 1', 2:'example 2', 3:'example 3'}; 
    for x in range(0,3): 
     select = raw_input("> ") 
     del q[int(select)] 
     print q 
+1

小評論 - 請不要在Python中使函數名稱大寫。這是爲了上課。 – 2013-02-22 03:10:24

+0

確定要點 – Arcturus 2013-02-22 03:12:01

+0

非常感謝! – user2097828 2013-02-22 03:12:50

0

試試這個:

def menu(): 
    q = {1: 'example 1', 2: 'example 2', 3: 'example 3'} 
    for _ in range(3): 
     print '\n'.join('{} - {}'.format(*item) for item in sorted(q.items())) 
     try: 
      print q.pop(int(raw_input('> ')), "That's not a valid option") 
     except ValueError: 
      print "That's not a valid option" 
    print "No more menu options left!" 
0

有你在這裏使用德爾理由嗎?這似乎太小,不必擔心明確刪除對象。您只需要將它們從列表中刪除:

q = ['example 1', 'example 2', 'example 3'] 
while len(q)>0: 
    try: 
     select = int(raw_input("> ")) 
     print q.pop(select-1) 
    except (ValueError, IndexError): 
     print 'please enter an integer between 1 and 3' 
相關問題