我想找到2D列表之间的距离,然后将其添加到元素中

时间:2019-03-26 15:31:00

标签: python

我的数据如下:

mx_ranges1 = [ 
  (848,888),
  (806,848),
  (764,806),
  (722,764),
  (680,722),
  (638,680),
  (596,638),
  (554,596),
  (512,554),
  (470,512),
  (428,470),
  (386,428),
  (344,386),
  (302,344),
  (260,302),
  (218,260),
  (176,218),
  (134,176),
]

a=((mx_ranges1[0][1]-mx_ranges1[0][0])/2)+(mx_ranges1[0][0])
b=((mx_ranges1[1][1]-mx_ranges1[1][0])/2)+(mx_ranges1[1][0])
c=((mx_ranges1[2][1]-mx_ranges1[2][0])/2)+(mx_ranges1[3][0])

print(a)
print(b)
print(c)`

这种方式并不是很有效,我知道它可以某种方式在for循环中表示,我只是不知道该怎么做。请给我一些参考,因为我是python和程序设计的新手。然后,我还有另一个带有y的列表,该列表也需要获取距离,然后将其添加到第一个元素。

不确定是否可以将其直接放置到单个2D数组中,但仅做第一部分对我来说就足够了。我可以手动完成其余的工作。

2 个答案:

答案 0 :(得分:1)

您可以使用简单的list comprehension

[(j-i)/2 + i for i,j in mx_ranges1]
# [868.0, 827.0, 785.0, 743.0, 701.0, 659.0, 617.0 ...

相当于以下for循环:

res = []
for i,j in mx_ranges1:    
    res.append((j-i)/2 + i)

您还提到了使用numpy数组。请注意,这是最有效且最简单的方法,因为这是Basic Slicing and Indexing的问题:

a = np.array(mx_ranges1)
(a[:,1] - a[:,0]) /2 + a[:,0]
# array([868., 827., 785., 743., ...

答案 1 :(得分:1)

脾气暴躁会更快!

create_table "golf_retailers", force: :cascade do |t|
    t.string "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "place_id"
    t.string "website"
    t.string "formatted_address"
    t.string "google_places_name"
    t.string "email"
    t.boolean "duplicate_domain"
    t.index ["duplicate_domain"], name: "index_golf_retailers_on_duplicate_domain"
  end

这将返回:

import numpy as np

mx_ranges1 = [ 
  (848,888),
  (806,848),
  (764,806),
  (722,764),
  (680,722),
  (638,680),
  (596,638),
  (554,596),
  (512,554),
  (470,512),
  (428,470),
  (386,428),
  (344,386),
  (302,344),
  (260,302),
  (218,260),
  (176,218),
  (134,176),
]

a = np.array(mx_ranges1)

# the first index accessor : says all rows, the second specifies a column
result = (a[:,1] - a[:,0])/2 + a[:,0]

# result contains one value for each row/tuple in `mx_ranges1`
print(result)

在输入2D数组的每一行中包含一个值。所以868 = 888-848 / 2 + 848。