将列表中的每个值与另一个列表中的两个值进行比较

2024-06-16 12:23:12 发布

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

我正在尝试使用元素的z和标高在标高之间定位元素

当elemz中的一个元素位于列表级别EV的两个值之间时,我需要获得较低的值(较低的标高)。例如:元素z=1000>;标高(0)和<;elev(4000)。在这种情况下,我需要附加elev(0),而不是该元素的z100

如果我的海拔高度是:

[-4000, 0, 4000, 9600, 17600, 26600, 33600]

我的元素有以下z:

[-3000, -4000, 1, 18000, 1000, 7000, 27000 , 33600 , 40000, 3500, 5000]

最后,我需要以下列表:

-4000, -4000, 0, 17600,0 ,4000 ,26600 ,33600 ,33600 ,0 ,4000

我尝试了以下方法:

levElev = [-4000, 0, 4000, 9600, 17600, 26600, 33600]
elemZ = [-3000, -4000, 1, 18000, 1000, 7000, 27000 , 33600 , 40000, 3500, 5000]

for z in elemZ:
    lowestElev = []
    for i in range(0, len(levElev)):
        for e in levElev:
            if z >= e[i] and z<e[i+1]:
                lowestElev.append(e)
        

OUT = lowestElev

Tags: in定位ltgt元素列表for级别
2条回答

以下是一个适用于所有值的版本:

levElev = [-4000, 0, 4000, 9600, 17600, 26600, 33600]
elemZ = [-3000, -4000, 1, 18000, 1000, 7000, 27000 , 33600 , 40000, 3500, 5000]

lowestElev = []
for z in elemZ:
    for i in range(0, len(levElev) - 1):
        if z < levElev[i+1]:
            lowestElev.append(levElev[i])
            break
    else:
        lowestElev.append(levElev[-1])

结果:

[-4000, -4000, 0, 17600, 0, 4000, 26600, 33600, 33600, 0, 4000]

这个else技巧是一件很值得了解的事情。Python有一件很酷的事情,并非所有语言都有。它说“如果你一直在迭代过程中,从不调用break,那么就这样做。”

通过将值添加到立面列表的末尾并编写以下代码来解决此问题:

levElev = [-4000, 0, 4000, 9600, 17600, 26600, 33600, 300000]
elemZ = [-3000, -4000, 1, 18000, 1000, 7000, 27000 , 33600 , 40000, 3500, 5000]

list = []


   
for z in elemZ:
    for i in range(0, len(levElev)-1):
            if z >= levElev[i] and z < levElev[i+1]:
                list.append(levElev[i])

OUT = list

相关问题 更多 >