【问题标题】:How to print an index of element in a list - python如何打印列表中元素的索引 - python
【发布时间】:2020-08-17 12:20:00
【问题描述】:

#将加载 2 个数组的程序。第一个数组的元素是坐标X。#第二个数组的元素是平面上一个点的坐标Y。#找到该点并打印最靠近起点的点的坐标索引,坐标 0,0。

import math

i = 0
X = [3,32,15,43,5,22,90,1]
Y = [3,32,15,43,5,22,90,1]
min = math.sqrt(X[0])**2 + math.sqrt(Y[0])**2
while i < len(X):
    U = math.sqrt(X[i])**2 + math.sqrt(Y[i])**2
    if U < min:
        min = U
    else:
        min = min
    i = i + 1

mindex = X.index(min)


print(min)
print(mindex)

所以基本上坐标应该是 1,1,因为这是距离 D = 2 的 nul 点的最短距离。但是我如何也打印该元素 1 的索引。索引为 7

编辑:在python中

【问题讨论】:

    标签: python loops indexing


    【解决方案1】:

    给你:

    import math
    
    X = [3, 32, 15, 43, 5, 22, 90, 1]
    Y = [3, 32, 15, 43, 5, 22, 90, 1]
    
    # calculate distances using list comprehension
    distances = [math.sqrt(x) ** 2 + math.sqrt(y) ** 2 for x, y in zip(X, Y)]
    
    # find minimal distance
    min_distance = min(distances)
    
    # find index of minimal index
    min_distance_index = distances.index(min_distance)
    print(min_distance, min_distance_index)  # Output: 2.0 7
    
    

    【讨论】:

    • 谢谢。这非常有用。我大约一周前开始编码,像你这样的人让它变得更有趣。我什至不知道“zip”
    【解决方案2】:

    请注意,您的欧几里得距离公式有误。如果它们都是正数,则您的公式归结为x + y,否则会出现错误。实际公式为math.sqrt(x ** 2 + y ** 2)

    从您问题的措辞看来,您只想打印索引,在这种情况下,以下内容就足够了

    import math
    
    X = [3,32,15,43,5,22,90,1]
    Y = [3,32,15,43,5,22,90,1]
    
    min_index = min(range(len(X)), key=lambda i: math.sqrt(X[i] ** 2 + Y[i] ** 2))
    print(min_index)
    

    【讨论】:

    • 他们说点 (1, 1) 的距离为 2。你计算 sqrt(2) 代替。
    • 谁说的?您需要使用什么距离度量?
    • OP 这么说。在问题中。
    • 哦,对不起,我让您与那里的 OP 混淆了。我认为这只是运行代码的结果,而不是需求的一部分。
    【解决方案3】:

    超级简单,几乎没有不便。

    >>> min(range(len(X)), key=lambda i: X[i] + Y[i])
    7
    

    (不知道你认为平方根可以达到什么效果,所以我删除了它。)

    【讨论】:

      【解决方案4】:

      检查一下:

      import math
      
      i = 0
      X = [3,32,15,43,5,22,90,1]
      Y = [3,32,15,43,5,22,90,1]
      min = math.sqrt(X[0])**2 + math.sqrt(Y[0])**2
      idx = 0
      while i < len(X):
          U = math.sqrt(X[i])**2 + math.sqrt(Y[i])**2
          if U < min:
              min = U
              idx = i
          i = i + 1
      
      print(min)
      print(idx)
      

      【讨论】:

      • 只是我拼错了 idx 作为索引,现在它已被纠正
      • 但这将循环直到遍历整个列表,因此变量 i 将始终等于列表中的元素数,因此 i 将始终等于 7,即使我更改了元素列表。
      • 没有所需的索引将存储在变量idx 中,它仅在新距离小于之前的最小值时更新。更改元素并检查
      • 好的,但这对我也没有帮助,因为除非每个下一个距离都比上一个大,否则它实际上不会跟踪索引。 [10,9,5,10,3,8,1] 在这种情况下,最短距离是数字 1,索引为 6,但根据您的逻辑,索引将是 3
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2020-03-16
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多