Python:从列表中删除OUT-OF-ORDER数字

时间:2015-06-09 13:12:12

标签: python numpy

我正在学习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

这是为了这项任务:

  

您正在处理来自一系列实验的数据集   它由三部分组成。实验已在   随机顺序。每个实验都分配了一个   experiment-number和part-number,它们连接成一个小数   号码称为id号码。 id-number是通过分离而形成的   实验编号和零件编号的小数点。例如,   实验编号17第3部分已被分配了id-number 17.3。   请注意,您可以从id-number计算实验编号   向下舍入到最接近的整数。   你注意到由于错误,   对于一些实验,所有三个部分尚未完成。   为了进一步分析,您需要排除所有实验,其中一个或   更多零件不可用。你可以放心地假设,如果有的话   3个id-number具有相同的实验数,实验是   完成。

     

**问题定义**   创建一个作为输入的函数   id-numbers的向量,返回id-numbers的向量   不完整的实验已被删除。不是的id号码   删除必须保持与原始向量中相同的顺序。

解决方案模板

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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]