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

1.过滤掉列表[-1,-2,-3,4,5,6]中的负数和0

方法1,for循环

data = [-1, -2, -3, 4, 5, 6]
res = []
for i in data:
    if i > 0:
        res.append(i)
print(res)

方法2 filter

data = [-1, -2, -3, 4, 5, 6]
res = filter(lambda x: x > 0, data)
print(list(res))

方法3列表解析

data = [-1, -2, -3, 4, 5, 6]
res = [x for x in data if x > 0]
print(res)

性能对比:列表解析优于filter优于for循环。

补充,生成随机数字列表:

from random import randint

data = [randint(-10, 10) for _ in range(10)]
print(data)  # [5, 6, 6, -10, 6, -10, -7, 5, 5, -9]

2.筛选出字典{'lcg':100,'xiaoming':50,'wang':89,'hong':93}中值高于90的项

dic = {'lcg': 100, 'xiaoming': 50, 'wang': 89, 'hong': 93}
res = {k: y for k, y in dic.items() if y > 90}
print(res)  # {'lcg': 100, 'hong': 93}

3.筛选出集合{6,7,8,9,66,77}中能被3整除的元素

s = {6, 7, 8, 9, 66, 77}
res = {i for i in s if i % 3 == 0}
print(res)  # {9, 66, 6}

如何为元祖中的每个元素命名,提高程序的可读性

像上面这样的用0,1,2索引的方式获取元祖中的元素,实际上很不容易理解,也不容易维护。

解决方案:

方案1,拆包

t = ('jim', 19, 'male', 'jim666@gmail.com')
NAME, AGE, SEX, EMAIL = 0, 1, 2, 3
print(t[NAME])  # jim

方案2,使用标准库里面的collections.namedtuple代替内置的tuple

from collections import namedtuple

Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])
# s = Student(name='jim',age= 19, sex='male', email='jim666@gmail.com')
s = Student('jim', 19, 'male', 'jim666@gmail.com')
print(s.name)  # jim
print(s.age)   # 19
print(s)       # Student(name='jim', age=19, sex='male', email='jim666@gmail.com')
print(isinstance(s,tuple)) # True

如何统计出序列中元素出现频度

1.使用collections.Counter对象。将序列传入Counter构造器,得到对象是元素额度的字典

Counter.most_common(n)方法得到频度最高的n个元素的列表。

from random import randint

data = [randint(0, 10) for _ in range(20)]
print(data)  # [6, 2, 10, 5, 10, 9, 3, 10, 1, 6, 9, 9, 3, 4, 7, 3, 0, 7, 10, 0]

from collections import Counter

c = Counter(data)
print(c)                # Counter({10: 4, 9: 3, 3: 3, 6: 2, 7: 2, 0: 2, 2: 1, 5: 1, 1: 1, 4: 1})
print(c.most_common())  # [(10, 4), (9, 3), (3, 3), (6, 2), (7, 2), (0, 2), (2, 1), (5, 1), (1, 1), (4, 1)]
print(c.most_common(3)) # [(10, 4), (9, 3), (3, 3)]

如何根据字典中值的大小,对字典中的项进行排序

1.使用内置函数sorted

# 首先构造一个字典
from random import randint

dic = {k: randint(60, 100) for k in 'abcdefg'}
print(dic)  # {'a': 82, 'b': 64, 'c': 87, 'd': 75, 'e': 65, 'f': 64, 'g': 79}

# sorted的作用就是对序列进行排序
print(sorted([1, 3, 5, 2, 4, 6]))  # [1, 2, 3, 4, 5, 6]

print(sorted(dic.items(), key=lambda x: x[1]))
# [('b', 64), ('f', 64), ('e', 65), ('d', 75), ('g', 79), ('a', 82), ('c', 87)]

  

Python高效编程技巧的更多相关文章

  1. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

  2. 18个Python高效编程技巧,Mark!

    初识Python语言,觉得python满足了我上学时候对编程语言的所有要求.python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了.高级语言,如果做 ...

  3. Python高效编程技巧实战 实战编程+面试典型问题 中高阶程序员过渡

    下载链接:https://www.yinxiangit.com/603.html 目录:   如果你想用python从事多个领域的开发工作,且有一些python基础, 想进一步提高python应用能力 ...

  4. Python高效编程的19个技巧

    初识Python语言,觉得python满足了我上学时候对编程语言的所有要求.python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了.高级语言,如果做 ...

  5. python高级编程技巧

    由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr  ...

  6. 【Matlab编程】Matlab高效编程技巧

    1.默认状态下,matlab显示精度是short型,而默认的计算精度是double型,并且显示精度与计算精度没有关系. 2. 一只失明的猫的问题:注意方法! 3.给数组预分配空间是基本的高效编程准则之 ...

  7. 18个python的高效编程技巧

    01 交换变量 >>>a=3 >>>b=6 这个情况如果要交换变量在c++中,肯定需要一个空变量.但是python不需要,只需一行,大家看清楚了 >>& ...

  8. Python高级编程技巧(转)

    译文:http://blog.jobbole.com/61171/ 本文展示一些高级的Python设计结构和它们的使用方法.在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求.对数 ...

  9. 符合语言习惯的Python优雅编程技巧

    Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然.要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀 ...

随机推荐

  1. 20165228 预备作业3 Linux安装及学习

    (一)安装虚拟机 根据娄老师给的Ubuntu版本和安装教程,我曾遇到如下问题: Q1:首先遇到的问题是没有开启虚拟化 解决方法:在重启电脑时进入BIOS>Configuratio > In ...

  2. vmware安装centos问题

    * 选择安装后,一直黑屏 重新启动电脑,在启动界面进入BIOS设置,找到Intel (R) Virtualization Technology,设置成Enabled,保存设置以后重新启动电脑,问题解决 ...

  3. virtualenv搭建python3 环境

    参考 1.安装python3 安装脚本如下: wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz tar zxvf Python ...

  4. [LeetCode&Python] Problem 717. 1-bit and 2-bit Characters

    We have two special characters. The first character can be represented by one bit 0. The second char ...

  5. Unity 3D光源-Directional平行光/逆光效果,光晕详解、教程

    Unity4大光源之平行光 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  6. 异步测试celery

    django异步请求: Django从一个http请求发起,到获得响应返回html页面的流程大致如下:http请求发起 -- http handling(request解析) -- url mappi ...

  7. HPU组队赛L(没有标题。。)(贪心)

    时间限制 1 Second  内存限制  512 Mb 题目描述 给个字符串s和整数k.(字符串中只有0-9) 问至少修改字符串中的几位才可以让字符串的各个位之和大于等于k. 输入 第一行一个整数T表 ...

  8. D. The Fair Nut and the Best Path 树形dp (终于会了)

    #include<bits/stdc++.h> #define int long long using namespace std; ; int a[maxn]; int dp[maxn] ...

  9. 《DSP using MATLAB》Problem 6.17

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  10. 经过强制类型转换以后,变量a, b的值分别为( )short a = 128; byte b = (byte) a;

    1.Java中用补码形式表示 2.第一位正负位,1表示负,0表示正. 3.原码:一个数的二进制表示.                  3的原码00000011   -3的 原码 10000011 4 ...