2015-06-09 25 views
-1

我正在學習python,但我似乎無法弄清楚如何從數組中刪除元素,這是不正確的。Python:從列表中刪除無序數字

說,我

np.array([1.3,2.2,2.3,4.2,5.1,3.2,5.3,2.1,1.1,5.2,3.1]) 

我需要刪除1.3和1.1,因爲1.2丟失。 4.2還需要刪除,因爲我沒有4.1和4.3。總之我想從列表中刪除OUT-OF-ORDER數字。

我該怎麼做?

這三個是正確的:5.1,5.2和5.3

正是這個分配:

您正在處理的數據集從一系列的實驗,每個 其中包括三個部分。已經在 的隨機順序中進行了實驗。每個實驗都被分配了一個 實驗編號和一個部分編號,它們被連接成一個十進制的 編號,稱爲一個編號。該ID號是通過將 實驗號和部件號分開小數點形成的。例如, 實驗編號17第3部分已被分配了編號17.3。 請注意,您可以計算從ID號碼開始的實驗號碼 ,並將其舍入到最接近的整數。 您注意到由於錯誤, 對於一些實驗,所有三個部分尚未完成。 有關進一步分析,您需要排除其中一個或多個零件不可用的所有實驗。您可以放心地假設,如果有3個具有相同實驗編號的ID號碼,則實驗完成爲 。

**問題定義** 創建一個函數,它接受作爲輸入 ID-數的向量,並返回其中所有 不完整的實驗已經被移除的ID號碼的載體。不是 的id號碼必須保持與原始向量中相同的順序。

解決方案模板

def removeincomplete(id): 
#your code here 
return completeid 
+4

你試過了什麼?您介意發佈更多示例輸入和輸出嗎?它是否應該爲每個數字檢查\ *。1,\ *。2和\ *。3,還是有更多?例如,如果3.1缺失,是否應該刪除所有3. \ *或只有3.2,因爲這是唯一與其相鄰的數字? – pzp

+0

我不知道從哪裏開始,但我可以在後 – Gliz

+0

中發佈作業。恐怕您的問題目前沒有多大意義。嘗試更清楚地說明你需要做什麼.. – drevicko

回答

1
In [3]: from operator import itemgetter 
In [4]: from itertools import groupby 
In [5]: lst 
Out[5]: [1.3, 2.2, 2.3, 4.2, 5.1, 3.2, 5.3, 2.1, 1.1, 5.2, 3.1] 

#getting the index of all the floats 
In [6]: idx=[(i,j) for (i,j) in enumerate(lst)] 

#Converting floats to strings 
In [7]: str_lst=[str(i) for i in lst] 

#Using groupby from itertools to group the elemnets 
In [8]: a=[list(g) for k,g in groupby(sorted(str_lst),key=itemgetter(0))] 

In [9]: b=[float(x) for _list in a if len(_list)==3 for x in _list ] 

In [10]: [j for i,j in idx if j in b] 
Out[10]: [2.2, 2.3, 5.1, 5.3, 2.1, 5.2] 
0

爲你的問題有一個明確的設定值,你可以使用這個邏輯:

1.排序陣列,並且其存儲陣列的溫度。

2.從現在開始遍歷此有序陣列和檢查的區別一樣,你可以使用這種方法

if(array[1] - array[0] == 0.1) && (array[2] - array[1] == 0.1)) 
move to array[3] 
else 
add array[0] to del_list 


按照這個直到你到達最後一個元素,採取的邊界條件照顧。

3。現在遍歷這個del_list並從你的原始數組中刪除元素,你可以使用這個邏輯:

a = [1, 2, 3, 4] 
a.remove(2) # 2 is not the position! 
print a 
[1, 3, 4]