zoukankan      html  css  js  c++  java
  • python数据结构-如何在列表、字典、集合中根据条件筛选数据

    如何在列表、字典、集合中根据条件筛选数据

    问题举例:

    过滤列表[1, 2, 5, -1, 9, 10]中的负数

    筛选字典{“zhangsan”:97, "lisi":80, "wangwu":60, "liqiang":91}中的值高于90的键值对

    筛选集合{89, 70, 60, 80, 90}中能被3整除的元素

    列表

    一般遇到这种问题,我们首先会想到用for循环的方式去解决

    (1)for循环

    from random import randint
    nums = [randint(-10, 10) for _ in range(20)] #生成一个列表
    res_list = []
    for ele in nums:
        if ele > 0:
            res_list.append(ele)

    但是这种方式并不pythonic

    (2)列表解析

    from random import randint
    nums = [randint(-10, 10) for _ in range(20)]
    res_list = [ele for ele in nums if ele > 0] #list comprehension

    (3)filter函数

    from random import randint
    nums = [randint(-10, 10) for _ in range(20)]
    res_filter = filter(lambda x: x > 0, nums) #filter
    res_list = list(res_filter)

    字典

    (1)字典解析

    from random import randint
    grade_info = {"stu%d" % i: randint(50, 100) for i in range(10)}
    res_dict = {k: v for k, v in grade_info.items() if v > 70}

    (2)filter函数

    from random import randint
    grade_info = {"stu%d" % i: randint(50, 100) for i in range(10)}
    res_filter = filter(lambda item: item[1] > 70, grade_info.items())
    res_dict = dict(res_filter)

    集合

    集合解析

    from random import randint
    nums_set = {randint(10, 20) for _ in range(20)}
    nums_res = {ele for ele in nums_set if ele % 3 == 0}

    filter函数

    from random import randint
    nums_set = {randint(10, 20) for _ in range(10)}
    nums_filter = filter(lambda x: x % 3 == 0, nums_set)
    nums_res = set(nums_filter)

    参考资料:python3实用编程技巧进阶

  • 相关阅读:
    【题解】P3388 【模板】割点(割顶)
    【题解】T156527 直角三角形
    【题解】T156526 各数字之和
    【题解】P5318 【深基18.例3】查找文献
    数据结构:邻接表
    【题解】P3387 【模板】缩点
    全网最最详细!一文讲懂Tarjan算法求强连通分量&缩点
    vue组件间通信
    vue实现头像上传
    解读JavaScript中的Hoisting机制(js变量声明提升机制)
  • 原文地址:https://www.cnblogs.com/marton/p/10720744.html
Copyright © 2011-2022 走看看