2016-09-26 36 views
-1

我想創建一個函數,通過指定的索引或項目傳遞從傳遞的列表中刪除項目。關於Python函數和列表的困惑

如果用戶希望使用索引從列表中刪除項目,則傳遞的第三個參數將是「index」,如果用戶希望使用傳遞的項目刪除在列表中找到的第一個項目,則第二個參數將是「{item}」

例如,在指數3從列表中刪除的項目,這將是命令myFunction(myList,3,」index」)

我很困惑這個功能的一部分。我編寫的代碼完全符合問題似乎要求的內容,但它不使用函數。我的代碼如下:

mylist = ["one" , "two" ,"three" , "four" , "five"] 
print "list is composed of: "+ str(mylist) 
name = raw_input("Index of item to be removed. ex. 1") 
name2 = raw_input('"item to be removed. ex. four') 
name3 = int(name) 
del mylist[name3] 
mylist.remove(name2) 
print mylist 

看來,我需要建立一個函數來做到這一點,然後通過我的列表中,索引/項目等),但我很失去了對這個部分。

+0

您的代碼不會** **,按索引和值刪除。 –

+0

EDX教不知道如何用'def myFunction()'定義函數? – Barmar

+0

是的,我知道我的代碼都是這樣做的,但它是要求做這個代碼作爲一個函數的一部分,這是我使用myfunction(mylist,3,「索引」)等困惑的地方...... @barmar如果你有一個鏈接到那個網頁我很喜歡它,我從pdf中得到的pdf並沒有特別定義如何做到這一點。我很抱歉,如果這些都是非常簡單的問題,我對此很陌生 –

回答

1

的問題(我認爲)是:「如果用戶希望使用索引從列表中刪除某個項目時,如果用戶希望使用傳遞的項目刪除在列表中找到的第一個項目,則第二個參數將是「{項目}」

此練習的目的(推測是)是練習寫一個函數。是的,你可以做到沒有功能,但現在你需要寫一個函數和傳遞參數的做法。函數是編程中非常重要的部分,但這不是一個很好的地方。

所以首先我們定義函數:

def removeItem(theList, theItem, typeOfItem=None): 

通知我給的None默認值,因爲第三個參數是可選。

我們要做的第一件事就是測試。問題是這是一個索引,那麼它會說"index"否則第二個參數將會說"{item}"。所以它會是一個或另一個。(如果情況並非如此,那麼你應該問一個問題)。

索引部分很簡單:

if typeOfItem == "index": 
     del(theList[theItem]) 

,但現在它是一個比較複雜一點,因爲{ }的,這是我們必須刪除:

else: 
     theList.remove(theItem[1:-1]) 

最後這部分被移除切片,其開始於字符1(第二個字符)並結束於最終字符-1,因此移除了{ }

所以最終的功能代碼,與測試,方法是:

def removeItem(theList, theItem, typeOfItem=None): 
    if typeOfItem == "index": 
     del(theList[theItem]) 
    else: 
     theList.remove(theItem[1:-1]) 

mylist = ["one" , "two" ,"three" , "four" , "five"] 
removeItem(mylist, 3, "index") 
print mylist 

mylist = ["one" , "two" ,"three" , "four" , "five"] 
removeItem(mylist, "{two}") 
print mylist 

通知功能和列表的一個重要特徵。如果你改變函數內部的列表,那麼它也會改變它外部的函數 - 它是相同的列表。數字和字符串並非如此。

1

你真的需要在你的問題上鍛鍊技能。理解你想要完成的事情是非常困難的。使半打的假設之後,我覺得這是你正在嘗試做的事:

def listRemover(mylist,index_or_name,mytype): 
    if mytype == "index": 
     del mylist[index_or_name] 

    if mytype == "name": 
     mylist.remove(index_or_name) 

它雖然有在你的Python的基本知識,一些大漏洞是顯而易見的。你需要研究一個函數是什麼,它爲什麼是有用的,以及如何使用它們。

+0

我現在只做了兩個星期,所以是的,我的知識中有很多漏洞:/ –

+0

使用一個名爲'type'的變量不是一個好主意,它會掩蓋相同名字的內建。 – cdarke

+1

@ ed.hank看到了,但是當你使用堆棧溢出作爲柺杖來填補你知識中的基本漏洞時,你會壓倒擁有中級到高級知識的人。如果你發現自己在基本概念上「非常迷茫」,那麼堆棧溢出不應該成爲你的目標。你的教授或你的助教應該是你的第一道防線。 – RPGillespie

1

看來我需要創建一個函數來做到這一點,然後通過我的列表,索引/項目等),但我很失落這部分。

Google it!(查詢= 「定義功能蟒蛇」)

顯示你的研究。函數的基本形式是:

def funcname(arg1, arg2, arg3): 
    # now you can use the vars arg1, arg2, and arg3. 
    # rename them to whatever you want. 
    arg1[0] = "bannanas" 

所以,

array = ['mango', 'apple'] 
funcname(array) 
print(array) # -> ['bannanas', 'apple']