我想在特定条件下切片多维列表。我有一个传感器,它提供一对(质量,角度,距离)作为多维列表。
ex.
a = [(10,0,3),(10,10,6),(10,15,4),(10,20,5),(10,3,3),(10,5,6)]
现在如果到该点的距离大于5,我还需要检测角度。现在,在10度以上的角度内,我需要对数组进行切片,而与距离的大小无关。
所以我的结果是:
b= [(10,10,6),(10,15,4),(10,20,5)]
距离为6,角度范围在10到10 + 10 = 20之间。
如果您能给我一个想法,即如何找到满足条件的特定列表的索引,以便我可以处理列表,我将非常高兴。
答案 0 :(得分:2)
您可以这样编写函数(take
):
a = [(10, 0, 3), (10, 10, 6), (10, 15, 4), (10, 20, 5), (10, 3, 3), (10, 5, 6)]
def take(lst, th=5):
idx = next(i for i, e in enumerate(lst) if e[2] > th) # get the index of the first with distance > th
quality, angle, distance = lst[idx] # unpack in quality, angle, distance
return [e for e in lst[idx:] if angle <= e[1] <= angle + 10] # filter the list starting from idx
result = take(a)
print(result)
输出
[(10, 10, 6), (10, 15, 4), (10, 20, 5)]
答案 1 :(得分:1)
如果可以选择使用Pandas
,则可以采用以下方法:
i = 5
j = 10
df = pd.DataFrame(a, columns = ('quality', 'angle', 'distance'))
print(df)
quality angle distance
0 10 0 3
1 10 10 6
2 10 15 4
3 10 20 5
4 10 3 3
5 10 5 6
这里ix1
是distance
上第一个条件的首次出现的索引,而ix2
是满足{{1 }}:
angle