需要帮助了解一行代码如何使用最大y坐标在python中查找对应的X值吗

需要帮助了解一行代码如何使用最大y坐标在python中查找对应的X值吗,python,Python,我有一个脚本,每行循环42个X和Y坐标,并找到对应于该行中最高Y值的X坐标。如果X值对应于最高的Y,则返回1(True),否则返回0 一切都很好。我只是有点不明白为什么它会起作用。我将发布脚本中的相关代码部分,然后讨论我后来感到困惑的部分 for row in reader: vals = row[0:84] vals = [float(v) for v in vals] # convert from strings to floats max_i = np.nanargmax

我有一个脚本,每行循环42个X和Y坐标,并找到对应于该行中最高Y值的X坐标。如果X值对应于最高的Y,则返回1(True),否则返回0

一切都很好。我只是有点不明白为什么它会起作用。我将发布脚本中的相关代码部分,然后讨论我后来感到困惑的部分

for row in reader:
   vals = row[0:84]
   vals = [float(v) for v in vals] # convert from strings to floats
   max_i = np.nanargmax(vals[1::2]) # go from index 1 in steps of 2, ie. only the y values, and find the max y value. Ignore NA results.
   fan_line = 0

   for i in range(0,84,2): # go through x values
      fan_line += 1
      max_y = 1 if max_i*2 == i else 0 # note, it's max_i*2 because max_i is the index in just the y list (vals[1::2])

让我困惑的是:

max_y = 1 if max_i*2 == i else 0 # note, it's max_i*2 because max_i is the index in just the y list
我知道在#之后有一个解释,但老实说,我不明白。写剧本的人确实向我解释过一次,这很有道理,但他们不再是我部门的一员。我真的很想知道到底发生了什么,以防对未来的项目有用。我理解代码的其余部分,但这一行让我感到困惑

编辑


对不起,我应该澄清我不明白的是什么。我搞不懂max_I*2==I在做什么。
max_i*2
与“i”的关系如何?

这是python中的三元运算符:

线路

max_y=1,如果max_i*2==i=0
相当于

如果max_i*2==i:
最大值y=1
其他:
mas_y=0

max_i=np.nanargmax(vals[1::2])行中,它构造一个具有每秒值的数组,然后在该“每秒值”数组中查找最大值的位置

为了获得原始数组中的位置,我们需要将其乘以2(并加1)

例如:

>>> alphabet
'abcdefghijklmnopqrstuvwxyz'
>>> alphabet[1::2]
'bdfhjlnprtvxz'
>>> alphabet[1::2].index('j')
4
>>> alphabet[4*2 + 1]
'j'
>>> 

重构建议:为了减少代码的混乱,在第一时间将数据转换为元组列表;使用或
points=list(zip(VAL[0::2],VAL[1::2]))

谢谢您的回答。我现在意识到我不清楚我的问题是什么。不过,我觉得你对三元运算符的分解很有用。谢谢你的回复。这是非常清楚和有意义的。你的例子也很有用。