问题描述
如下:
array = [[[1220.0, 79.05], [1230.0, 79.33], … [5620.0, 70.32], [5630.0, 70.14]]
获取array中每50个点中的,y取值最大的点。
逻辑分析
如上的array,在坐标轴中也只是一条线,我们可以通过如下方式获取所有的点。
for item in array:
x = item[0]
y = item[1]
就像文章标题说的,我们可以先将一个Array分段,按照当前用户指定的步长,将列表分段
然后对每段区间,拿到y的值,进行对比,并获取该点坐标,这就是这个区间的峰值
代码实现
try:
items = ParseTask(data, rpm_type, refer_channel).user_run()
# print(items)
if items:
for item in items:
line_loc = [[x, y] for x, y in zip(
list(item["data"]["X"]),
list(item["data"]["Y"])
)] # 所有点的列表
point_max_list = []
for i in range(0, len(line_loc), range_key):
segment = line_loc[i:i + range_key]
print(len(segment))
max_y_in_point_data = sorted(segment, key=lambda k: k[1])[-1]
max_value_range_start = sorted(segment, key=lambda k: k[0])[0][0]
max_value_range_end = sorted(segment, key=lambda k: k[0])[-1][0]
max_y_in_point_item = {}
max_y_in_point_item["range"] = [max_value_range_start, max_value_range_end]
max_y_in_point_item["point"] = max_y_in_point_data
point_max_list.append(max_y_in_point_item)
return_items["data"].append({"{}".format(item["channel"]): point_max_list})
return_items["filename"] = filename
result_list.append(return_items)
except:
return JsonResponse({"code": 1, "msg": "当前文件计算出错,请检查数据"})
代码分析
推导式
列表推导式
# 列表推导式
list_b = [b for b in range(5)]
# in后面跟其他可迭代对象,如字符串
list_c = [7 * c for c in "python"]
# 带if条件语句的列表推导式
list_d = [d for d in range(6) if d % 2 != 0]
# 多个for循环
list_e = [(e, f * f) for e in range(3) for f in range(5, 15, 5)]
# 嵌套列表推导式,多个并列条件
list_g = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g != 0]
字典推导式
# 因为key是唯一的,所以最后value都是1
dict_a = {key: value for key in 'python' for value in range(2)}
# 可以根据键来构造值
dict_b = {key: key * key for key in range(6)}
# 遍历一个有键值关系的可迭代对象
list_phone = [('HUAWEI', '华为'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
dict_c = {key: value for key, value in list_phone}
sorted lambda排序
sorted
test_list = [11, 54, 23, 61]
# 升序
print(sorted(test_list))
# 降序
print(sorted(test_list, reverse=True))
lambda
匿名函数:
lambda [arguments]: expression
def lambda(arguments):
"""
匿名函数转换为函数形式
:param arguments:
:return:
"""
return expression
list排序
test_list = [[4, 2, 9], [1, 5, 6], [7, 8, 3]]
# 第一个元素排序,升序
print(sorted(test_list, key=lambda k: k[0]))
# 第一个元素排序,降序
print(sorted(test_list, key=lambda k: k[0], reverse=True))
# 第二个元素排序(升序)
print(sorted(test_list, key=lambda k: k[1]))
# 第三个元素排序(升序)
print(sorted(test_list, key=lambda k: k[2]))
字典排序
test_dict = {"q": 1, "r": 2, "a": 3}
# value排序
print(sorted(test_dict, key=lambda k: k[0]))
# key排序
print(sorted(test_dict.items(), key=lambda k: k[0]))
# key排序, 只显示key
print(sorted(test_dict, key=lambda k: test_dict[k]))
评论区