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