" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 203 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

PythonArray 分段取峰值

PySuper
2020-07-22 / 0 评论 / 0 点赞 / 12 阅读 / 4891 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

问题描述

如下:

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]))

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区