根据元素的差异创建一个列表

2024-05-14 21:44:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到一个连续线段的列表,这些线段是线串(QGIS,Shapefile)的一部分,并建立线串的一个近似直线的部分

在这一刻,我可以计算出方位角的部分,并把他们列在一个列表

az_list = [260,263,260,209,245,339,337,343]

所以一开始我想用az_list的元素填充一个新的列表,直到方差太大为止

示例:

前三个值az_list260、263、260构成了一条直线的近似直线段。我用以下公式检查这三个值的方差:

import numpy as np
np.var([260, 263, 260])    # result: 2.0

最后三个一:

np.var([339,337,343])    # result: 6.22...

知道了这一点,我可以确定对于方差var,当var > 0var < 10并且如果列表为空(这将是起点)math.isnan(np.var(az_list))返回False时,一个部分是直的

我开始把前三个值从az_list放到新列表straight_list。使用此代码,我试图使其运行,但它返回一个空列表

straight_list = []
while not math.isnan(np.var(straight_list)) and np.var(straight_list) != 0 and np.var(straight_list) < 10:
    for i in az_list:
        straight_list.append(i)

最后,我们希望实现一个列表,其中存储直线段,如:

straight_list = [[260,263,260],[339,337,343]]

Tags: and列表varnpmathresult直线list
1条回答
网友
1楼 · 发布于 2024-05-14 21:44:32

我建议您采用以下解决方案:

import numpy as np

az_list = [260,263,260,209,245,339,337,343]

straight_list = []
sublist = []
for az in az_list:
    sublist.append(az)
    if np.var(sublist) > 10:
        if len(sublist) > 2:
            straight_list.append(sublist[:-1])
        sublist = [az]

if len(sublist) > 1:
    straight_list.append(sublist)

print(straight_list)  # [[260, 263, 260], [339, 337, 343]]

相关问题 更多 >

    热门问题