在特定条件下如何在python中切片多维列表?

时间:2019-01-03 15:11:57

标签: python

我想在特定条件下切片多维列表。我有一个传感器,它提供一对(质量,角度,距离)作为多维列表。 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之间。

如果您能给我一个想法,即如何找到满足条件的特定列表的索引,以便我可以处理列表,我将非常高兴。

2 个答案:

答案 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

这里ix1distance上第一个条件的首次出现的索引,而ix2是满足{{1 }}:

angle