Python集合的学习

浏览次数:  发布时间:2017-08-31 17:40
推荐阅读:

使用python爬取csdn博客访问
最近学习了python和爬虫,想写一个程序练练手,所以我就想到了大家都比较关心的自己的博客访问量,使用python来获取自己博客的访问量,这也是后边我将要进行的项

Python中的推导式介绍
推导式是 Python 中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点。推导式包括: 列表推导式字典推导式集合推导式嵌套列表推导式 NOTE: 字典和集合推导是最近才加入到Python的(Python 2.7 和Python 3.1以上版). 下面简要介绍下: 【列表推导式】 列表

这里写图片描述


这里写图片描述

集合 集合的引入:

社团:
linux兴趣小组 linuxL = [“zhang”,”wang”]
python兴趣小组 pythonL = [“zhang”,”li”]
。。。。

统计所有的社团 l = []

student = “zhang” 列表: linuxL + PythonL = [“zhang”,”wang”,”zhang”,”li”] 集合: {“zhang”,”wang”,”li”} 集合的定义

** 不可变的数据类型一定可哈希;hash()内置函数可以判断某个类型是否可哈希;

集合的关系测试 s1 = {1, 2, 3} s2 = {2, 3, 4} s3 = {1, 2} s4 = {5} print "s1,s2,s3的交集:", s1.intersection(s2, s3) print "s1,s2,s3的交集:", s1 & s2 & s3 print "s1,s2,s3的并集:", s1.union(s2, s3) print "s1,s2,s3的并集:", s1 | s2 | s3 print "s1-s2的差集:", s1.difference(s2) print "s1-s2的差集:", s1 - s2 print "s1-s2-s3的差集:", s1.difference(s2, s3) print "s1-s2-s3的差集:", s1 - s2 - s3 print "s2-s1的差集:", s2.difference(s1) print "s1和s2的对等差分:", s1.symmetric_difference(s2) print "s1和s2的对等差分:", s1 ^ s2 print "s2和s1的对等差分:", s2.symmetric_difference(s1) # s.isdisjoint(s2) 如果有交集,返回False;否则,返回True; print "s1和s4是否没有交集:", s1.isdisjoint(s4) print "s3是否为s1的子集:", s3.issubset(s1) print "s1是否为s3的父集:", s1.issuperset(s3) 集合的增删改查: 增加: s.add(1), s.update(s1) 删除:
s.remove(1), # 删除存在的元素,如果不存在,直接报错;
s.discard(1) # 删除存在的元素,如果不存在,do nothing;
s.pop(), # 随即删除集合元素,不加任何参数; 复制: s1 = s.copy() #s和s1的id不同 清空: s.clear() 冻集(frozenset) 冻住的集合,不能增删改; frozenset(set) set(frozenset) 高级特性 切片 迭代 任何可以迭代的对象都可以用for循环遍历; 字典的迭代:默认是通过key进行迭代的;
for i in d:
print i 字典的枚举:枚举只能返回返回两个值,一个是索引下标,一个是迭代的元素;
d = {1:”a”,2:”b”}
for i,j in enumerate(d):
print i,j,d[j] 怎么去判断是否可迭代
from collections import Iterable
isinstance(“hello”,Iterable) 列表生成式

列表生成式,其实就是生成列表的一种方式,是python内置的;

简单的列表生成式
[ i*i for i in range(10) ] # 返回1-10平方的一个列表;
[ fun(i) for i in l] # 对列表的每个元素执行某个函数操作;

for…if的嵌套
[ i*i for i in range(1,10) if i%2==0] # 返回1-10之间所有的偶数
[ i for i in range(1,10) if isprime(i)] # 返回1-10之间所有的质数,判断质数的函数是自定义的;

for…for…的嵌套
[ i+j for i in “abc” for j in “123”] # 返回”abc”和”123”的所有组合;

生成器 列表生成式可以直接创建一个列表,但列表容量受内存的限制; 在Python中一边循环一边计算的机制,称为生成器(Generator);就是你需要多少,它就生成多少; 创建生成器的方法: 将列表生成式的[]改为(); 在定义的函数中加入yield关键字; 查看生成器元素的方式: 使用生成器的next方法;(不常用) 生成器是可迭代的对象,直接通过for循环查看;

1, 1 , 1+1
max = 6
def fib(max):
n,a,b = 0,1,1
while n < 6:
print a
a,b = b, a + b
n = n + 1

高阶函数 内置的高阶函数

map

reduce

reduce(f,[1,2,3,4]) === > add(add(add(1,2),3),4)
reduce(cheng,range(1,11))

求10的阶乘:
reduce(lambda x,y: x*y, range(1,n))

filter

In [1]: def is_oushu(n):
….: if n%2 == 0:
….: return True
….: else:
….: return False
….:

In [2]: filter(is_oushu,range(1,11))
Out[2]: [2, 4, 6, 8, 10]

sorted() n [3]: l = ["a","Ab","cd","C"] In [4]: sorted(l) Out[4]: ['Ab', 'C', 'a', 'cd'] In [5]: def cmp_ignore_case(s1,s2): ....: s1 = s1.lower() ....: s2 = s2.lower() ....: if s1 < s2: ....: return -1 ....: elif s1 > s2: ....: return 1 ....: else: ....: return 0 ....: In [6]: sorted(l,cmp_ignore_case) Out[6]: ['a', 'Ab', 'C', 'cd'] 练习1

输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2;

输入描述:
输入为一行,n(1 ≤ n ≤ 1000)

输出描述:
输出一个整数,即题目所求

示例1:

- 输入: 10 - 输出: 2

相关报道:

如何选择域名一直是不少站长在建站初期所遇到的比较头疼的问题之一:好域名被选走,自己想的又觉着没有什么价更多

说说Python程序的执行过程1 Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是,Python是一门解释更多

站群系统、站群软件项目组 CaiJiXia.Net & Powered by DedeCMS
Copyright © 2010-2016 新领酷信息科技有限公司 版权所有
售前咨询

微信客服


微信晚间客服