Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表中的每个值与另一个列表中的两个值进行比较_Python_List - Fatal编程技术网

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

Python 将列表中的每个值与另一个列表中的两个值进行比较,python,list,Python,List,我正在尝试使用元素的z和标高在标高之间定位元素 当elemz中的一个元素位于列表级别EV的两个值之间时,我需要获得较低的值(较低的标高)。例如:元素z=1000>elev(0)和=e[i]和z通过向高程列表末尾添加一个值并编写以下代码来解决: levElev = [-4000, 0, 4000, 9600, 17600, 26600, 33600, 300000] elemZ = [-3000, -4000, 1, 18000, 1000, 7000, 27000 , 33600 , 40000

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

当elemz中的一个元素位于列表级别EV的两个值之间时,我需要获得较低的值(较低的标高)。例如:元素z=1000>elev(0)和 如果我的海拔高度是:

[-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
levElev=[-4000,0,4000,9600,17600,26600,33600]
elemZ=[-3000,-4000,1180010007002700033600,4000035005000]
对于elemZ中的z:
lowestElev=[]
对于范围(0,len(levElev))内的i:
对于levElev中的e:

如果z>=e[i]和z通过向高程列表末尾添加一个值并编写以下代码来解决:

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
levElev=[-4000,0,4000,9600,17600,26600,33600,300000]
elemZ=[-3000,-4000,1180010007002700033600,4000035005000]
列表=[]
对于elemZ中的z:
对于范围(0,len(levElev)-1)内的i:
如果z>=levElev[i]和z
以下是一个适用于所有值的版本:

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])

else
技巧是一个值得了解的好东西。Python有一件很酷的事情,并非所有语言都有。它说“如果你一直在迭代中,从不调用
break

对所有元素进行下限二进制搜索,那么就这样做。这不起作用-它给出了“正确的“仅由于您更改了输入值而导致结果。更新:Oops。我没有马上注意到你在回答你自己的问题。在这种情况下,它确实起作用,因为它给了你作为OP想要的行为。不过,您可能想看看我的答案,它向您展示了如果您在整个循环中都没有运行
if
的代码,那么如何做一些事情。-它可以让你避免在你的清单末尾增加额外的、非常大的价值。。你有没有技巧让你在更复杂的列表和循环中变得更好?
[-4000, -4000, 0, 17600, 0, 4000, 26600, 33600, 33600, 0, 4000]