Python:几种函数的用法

今天,借助一个python文本统计的程序,整理一些自己不懂的函数运用、知识点。例如append()与extend()、rstrip()、sorted()、zip()、index(),函数式编程的map、reduce.

1、append():向列表的尾部添加一个新的元素。只接受一个参数
2、extend():只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中
3、rstrip() :删除 string 字符串末尾的指定字符(默认为空格)
4、zip():它是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。
举例说明:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)
[(1, 2, 3), (4, 5, 6)]

5、index(str):检测字符串中是否包含子字符串 str,返回字符所在位置
index = word1.index(word)

6、sorted(iterable, cmp=None, key=None, reverse=False)
如果是一个列表很简单,如下:

>>> a=[4,5,6,7,3,2,9]
>>> b=sorted(a)
>>> print b
[2, 3, 4, 5, 6, 7, 9]

如果是一个元组构成的列表,就要用参数key。lambda是一个隐函数,是固定写法,不要写成别的单词;a_tuple表示列表中的一个元素,在这里,表示一个元组,a_tuple只是临时起的一个名字,你可以使用任意的名字;a_tuple[0]表示元组里的第一个元素,当然第二个元素就是a_tuple[1];所以这句命令的意思就是按照列表中元组里的第一个元素进行排序。
如下:

>>> a=[('c',2),('b',4),('a',3)]
>>> b=sorted(a,key=lambda ab:ab[0])
>>> print b
[('a', 3), ('b', 4), ('c', 2)]
>>> c=sorted(a,key=lambda ab:ab[1])
>>> print c
[('c', 2), ('a', 3), ('b', 4)]
>>> 

使用reverse参数实现倒序排列:

>>> c=sorted(a,key=lambda ab:ab[1],reverse=1)
>>> print c
[('b', 4), ('a', 3), ('c', 2)]

7、map(function,list):二元函数,对list中的每个元素执行function函数定义的操作
8、reduce():直接上代码:

>>> a=[1,2,3]
>>>> def add(a,b):
    return a+b

>>> b=reduce(add,a)
>>> print b
6

全部代码:文本高频词统计
代码来源:网易云课堂:用Python做些事

def readFile(file_name):
    f=open(file_name,'r')
    y=[]
    x=f.readlines()
    for line in x:
        y.extend(line.split())
#append() 方法向列表的尾部添加一个新的元素。只接受一个参数。
#extend()方法只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中。
    f.close()
    word_list2 = []

    #单词格式化
    for word in y:
        # last character of each word
        word1 = word

        # use a list of punctuation marks
        while True:
            lastchar = word1[-1:]
            if lastchar in [",", ".", "!", "?", ";",'"']:
                word2 = word1.rstrip(lastchar)
# rstrip() 删除 string 字符串末尾的指定字符(默认为空格)
                word1 = word2
            else:
                word2 = word1
                break

        while True:        
            firstchar = word2[0]    
            if firstchar in [",", ".", "!", "?", ";",'"']:
                word3 = word2.lstrip(firstchar)
                word2 = word3
            else:
                word3 = word2
                break
            # build a wordList of lower case modified words
        word_list2.append(word3.lower())

    #统计词频
    freq_list = []
    word_saved = []
    for word2 in word_list2:
        if not word2 in word_saved:
            word_saved.append(word2)
            freq_list.append((word2,word_list2.count(word2)))

    #排序
    sorted_list = sorted(freq_list,key=lambda x:x[1],reverse=True)  
    return sorted_list
# 合并统计函数
def mergeStatic(list1,list2):

    word1,num1=zip(*list1)
    # zip接受2个列表,组成元组的列表,zip*是拆分,zip的反操作
    merge_list = []

    #将list2中的word加入到merge_list
    for word,num in list2:
        if not word in word1:
            merge_list.append((word,num))
        else:
            index = word1.index(word)
            # index()检测字符串中是否包含子字符串 str,返回字符所在位置
            merge_list.append((word,num+num1[index]))

    #将list1中没有统计到merge_list的word加入
    word2,num2=zip(*list2)        
    for word,num in list1:
        if not word in word2:
            merge_list.append((word,num))

    #排序
    sorted_list = sorted(merge_list,key=lambda x:x[1],reverse=True)    
    return sorted_list


if __name__=="__main__":
    file_list = ['article_000.txt','article_001.txt','article_002.txt','article_003.txt','article_004.txt','article_005.txt'] 
    cc=map(readFile,file_list)
    word_list = reduce(mergeStatic,cc)
    # 对所有文章依次进行mergestatic()函数操作,返回最后结果

    print "最常用的单词排行榜:"
    for word in word_list[0:10]:
        print "%-5s %d" % (word[0], word[1]) 

参考链接:

  1. Python中zip()函数用法实例教程
  2. 网易云课堂:用Python做些事
  3. Python教程:[66]sorted()排序详解
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值