2017-09-25 199 views
1

我寫了一個函數來刪除給定列表中指定的項目。降低程序的時間複雜度

def remove_given_elements(arr1) : 
    b = [] 
    x = int(input("Enter the number of items to be removed :")) 
    for i in range(x) : 
     y = int(input("Enter the position to be removed :")) 
     b.append(y) 

    arr3 = [] 
    pos = 0 

    for i in range(len(arr1)) : 
     arr3.append(arr1[i]) 
     for j in range(len(b)): 
      if pos == b[j]: 
       arr3.pop(b[j]) 
       arr3.append(None) 
     pos += 1 

    arr4 = [] 

    for i in arr3: 
     if i != None : 
      arr4.append(i) 

    return arr4 

a = [100,200,323,434,512,656] 
print("After removing elements",remove_given_elements(a)) 

輸出:

Enter the number of items to be removed :3 
Enter the position to be removed :1 
Enter the position to be removed :3 
Enter the position to be removed :4 
After removing elements [100, 323, 656] 

至於,我是新來編程。我真的不知道有什麼方法來減少我最壞的情況下的時間複雜度。任何形式的幫助表示讚賞或請指導我使用減少時間複雜性的適當方法。

+0

你需要指定項目的金額將被刪除? – Eduardo

+0

@Eduardo是的,因爲我想刪除多個項目。 –

回答

0

您可以先詢問職位並將其存儲在元組中。然後應用該功能。

def remove(_list, pos): 
    return [v for i, v in enumerate(_list) if i not in pos] 

positions = (1, 2, 3) 
l = [1, 2, 3, 4, 5, 6, 7] 
result = remove(l, positions) 
print(result) 

該函數返回一個List Comprehension

+0

謝謝這是有幫助的,我也從中學到了一些東西。 –