我的数据如下:
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数组中,但仅做第一部分对我来说就足够了。我可以手动完成其余的工作。
答案 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。