zoukankan      html  css  js  c++  java
  • python学习之jieba库和yield生成器以及迭代器

    一、jieba库的三种模式和函数

    首先得安装jieba库
    在官网https://pypi.org/project/jieba/
    #files下载源文件,保存在python子文件夹Scripts文件夹里面
    打开命令行,进入到下载的jieba库源文件的setup.py文件的上一级文件目录下
    输入命令python setup.py install等待安装即可



    import jieba text = ("test.txt","r",encoding = "utf-8")#注意,这里的编码方式一定要是utf-8,否则读取文本会出错 #精确模式,这个会最准确的将文本中的词语切割出来,没有冗余 words1 = jieba.lcut(text) #全模式,会将所有可能出现的词语列举出来,有冗余 words2 = jieba.lcut(text,cut_all = True) #搜索引擎模式,在精确模式上,再次对词语进行拆分 words3 = jieba.lcut_for_search(text)
    #jieba库的函数,向jieba库的分词词库里面增加切割的词语
    jieba.add_words(string)
    #例如 words1 = jieba.lcut("中国是一个伟大的国家") #输出words1:['中国', '是', '一个', '伟大', '的', '国家'] words2 = jieba.lcut("中国是一个伟大的国家",cut_all = True) #输出words2:['中国', '国是', '一个', '伟大', '的', '国家'] words3 = jieba.lcut_for_search("中华人民共和国是伟大的") #输出words3:['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的']

    jieba.lcut("中国是一个美丽的国家")
    #输出:['中国', '是', '一个', '美丽', '的', '国家']
    jieba.add_words("美丽的国家")
    jieba.lcut("中国是一个美丽的国家")
    #再次输出:['中国', '是', '一个', '美丽的国家']

     二、yield生成器

    #yield生成器generator所创建的是一个算法,只有通过next()方法调用才会输出结果,而它在调用到最后一个就会停止调用,所以这需要一个变量来接收
    
    
    
    #创建生成器的方法有很多
    
    
    #方法一:
    L = [x*x for x in range(10)]#这是普通的列表
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]#这是输出
    d = (x*x for x in range(10))#将中括号改成小括号就可以创建一个生成器
    <generator object <genexpr> at 0x0000018E70E38B10>#这是直接输入d的结果
    0
    1
    4
    ...
    以上是依次调用next(d)输出的结果,这是不是很麻烦,因为手动调用需要很多次,所以现实中都用for循环调用,因为generator所返回的是一个可迭代的对象
    for i in d:
        print(i)
    
    
    
    
    #方法二:
    #可以在函数中使用yield生成器,这样该函数就变成了一个生成器
    #例如斐波拉契数列,max是要输出的个数,n用来计算
    def fib(max):
        n,a,b = 0,0,1
        while (n < max):
            print(b)
            a,b = b,a+b
            n += 1
    fib(5)#直接调用,会直接输出结果
    
    #使用yield生成器创建斐波那契数列函数生成器
    def fib(max):
        n,a,b = 0,0,1
        while (n < max):
            yield b
            a,b = b,a+b
            n += 1
    fib(5)#不会输出数列,而是输出fib的类型:<generator object fib at 0x0000018E756B01B0>
    next(fib(5))#正确的调用方式
    
    
    
    
    #方法三,yield生成器与函数的关系,函数在执行到yield语句时就会返回,再次调用函数时会从上次yield语句的下一句开始执行
    def ofo():
        print("step 1")
        yield 1
        print("step 2")
        yield 2
        print("step 3")
        yield 3
    o = ofo()#o用来接收generator算法
    o.next()#这个输出方法在python3中不适用
    next(o)#这个才是正确的调用方法
    
    #参考网站:https://www.liaoxuefeng.com/wiki/897692888725344/92302968513862
    

    三、迭代器

    #只要是可迭代的,无论是否有下标,都可以迭代;任何实现了next()方法的都可以被称为迭代器
    
    #字典的迭代,默认情况下字典迭代的是key,如果要迭代value,可以用for value in dict.values();如果要迭代键和值,可以用for keys,values in dict.items();迭代key,可以用for key in dict()
    for keys,values in {'a':1,"b":2,"c",3}.items():
        print(keys,values)
    #输出
    a 1
    b 2
    c 3
    
    
    #列表的迭代
    for i in [1,2,3,4,5,6]:
        print(i)
    #输出
    1
    2
    3
    ...
    
    
    #字符串的迭代
    for i in 'ABC':
        print(i)
    #输出
    A
    B
    C
    
    
    #集合的迭代
    s = set([1,2,3])#创建一个集合
    for x in s:
        print(x)
    #输出
    1
    2
    3
    
    
    
    #如何判断对象是否可迭代Iterable?通常是通过collections模块的Iterable类型来判断该对象是否可迭代
    from collections import Iterable
    isinstance('abc',Iterable)
    #True
    isinstance(123,Iterable)
    #False,整数不能迭代
    isinstance([1,2,3],Iterable)
    #True
    
    
    #for循环的本质就是通过不断调用next()函数实现的
    for x in [1,2,3]:
        pass
    #创建一个可迭代Iterato的对象,使用iter()方法
    #完全等价于
    it = iter([1,2,3])
    while True:
           try:
                x = next(it)#通过next()方法获取下一个值
            except StopIteration:#到达结尾时引发异常StopIteration就退出循环
                break
    

    四、python如何去掉标点符号

    #方法一
    string.replace('需要被替换的一个标点符号','用来替换的标点符号')
    string.replace('?',' ')#将问号用空格来替换
    
    #方法二
    for i in "各种标点符号":
        string.replace(i,' ')#将各种标点符号用空格来替换
    for i in ",.?:;!":
        string.replace(i,' ')
    
  • 相关阅读:
    Nim or not Nim? hdu3032 SG值打表找规律
    Maximum 贪心
    The Super Powers
    LCM Cardinality 暴力
    Longge's problem poj2480 欧拉函数,gcd
    GCD hdu2588
    Perfect Pth Powers poj1730
    6656 Watching the Kangaroo
    yield 小用
    wpf DropDownButton 源码
  • 原文地址:https://www.cnblogs.com/BASE64/p/10956302.html
Copyright © 2011-2022 走看看