python中部分函数的持续更新

一.enumerate()用法记录

  • enumerate()是python的内置函数
  • enumerate在字典上是枚举、列举的意思
  • 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
  • enumerate多用于在for循环中得到计数
  • 例如对于一个seq,得到:(0, seq[0]), (1, seq[1]), (2, seq[2])

enumerate()返回的是一个enumerate对象,例如: 

>>> seq = range(5)
>>> enumerate(seq)
<enumerate object at 0x7f1696ea0b90>

enumerate()使用

如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:

list1 = ["这", "是", "一个", "测试"]
#方法一
for i in range (len(list1)):
    print i ,list1[i]
#方法二
for index,item in enumerate(list1):#index默认从0开始的
    print(index,item)

enumerate还可以接收第二个参数,用于指定索引起始值,如:

list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1, 1):
    print index, item
>>>
1 这
2 是
3 一个
4 测试

补充


如果要统计文件的行数,可以这样写:

count = len(open(filepath, 'r').readlines())

这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作。 
可以利用enumerate():

count = -1 
for index, line in enumerate(open(filepath,'r')): 
    count += 1

二.sort()方法和sorted()函数

a.sort()是对列表进行原地修改,而且只能修改列表,无返回值(None),不需要传参

而sorted(a)对字符串,列表,字典和元组都可以进行排序,该函数返回的是一个排序好的列表。需要传参不是原地,会新开辟空间

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


c=[5,7,6,3,4,1,2] 
c.sort()
print(c)#[1, 2, 3, 4, 5, 6, 7]

三.reverse()方法与reversed()函数 

a.reverse()是对列表进行原地进行修改,会改变原列表的值。无返回值,不需要传参

reversed(a)是新开辟空间进行修改,参数可以是字符串,列表,字典,元组。返回的是迭代器

a = [5,7,6,3,4,1,2] 
b = reversed(a) 
print(a) #[5, 7, 6, 3, 4, 1, 2] 
#使用for循环进行遍历即可
print(b) #[2, 1, 4, 3, 6, 7, 5]  <list_reverseiterator object at 0x000001B2DFE23908>迭代器


c=[5,7,6,3,4,1,2] 
c.reverse()
print(c)#[2, 1, 4, 3, 6, 7, 5]

四.read(),readline()和readlines()三者的区别

python中读取文件常用的三种方法:read(),readline(),readlines(),今天看项目是又忘记他们的区别了。以前看书的时候觉得这东西很简单,一眼扫过,待到用时却也只知道有这么几个方法,不懂得它的原理与用法。也许吧,没有永远的记忆,况且根本没有用心去记它。同时也可以用来读系统输入sys.stdin.readline().strip()

既可以用来读文件,也可以读标准输入输出流

read([size])方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象

readline()从字面意思可以看出,该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象。

readlines()方法读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存。

五.如何去除字符串中的空格

1.strip()把头尾空格去掉

2.lstrip()把左边空格去掉

3.rstrip()把右边的空格去掉

4.replace('c1','c2')把字符串里的c1替换成c2.所以使用replace(' ','')来去掉所有空格

5.把字符串转为list,再遍历,再进行去除再转为字符串

6.使用split(),通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串

7.使用正则表达式   re.split(r'\s+', 'a b c')

六.zip函数,*zip函数,filter函数

可以看成是解压和压缩的区别,zip相当于压缩,*zip(*)相当于解压。

zip函数的原型为:zip([iterable, …])

参数iterable为可迭代的对象,并且可以有多个参数。该函数返回一个以元组为元素的列表,其中第 i 个元组包含每个参数序列的第 i 个元素。返回的列表长度被截断为最短的参数序列的长度。只有一个序列参数时,它返回一个1元组的列表。没有参数时,它返回一个空的列表。
一个参数时:

import numpy as np
a=[1,2,3]
zz=zip(a)
print(zz)

输出:[(1,), (2,), (3,)]

多个参数时:

import numpy as np
a=[1,2,3,4,5]
b=(1,2,3,4,5)
c=np.arange(5)
d="zhang"
zz=zip(a,b,c,d)
print(zz)

#输出:
#[(1, 1, 0, 'z'), (2, 2, 1, 'h'), (3, 3, 2, 'a'), (4, 4, 3, 'n'), (5, 5, 4, 'g')]

长度不同时:

import numpy as np
a=[1,2,3]
b=[1,2,3,4]
c=[1,2,3,4,5]
zz=zip(a,b,c)
print(zz)

输出:[(1, 1, 1), (2, 2, 2), (3, 3, 3)]

 *zip函数一个解压的过程,输出的是元组,不可变对象

import numpy as np
a=[1,2,3]
b=[4,5,6]
c=[7,8,9]
zz=zip(a,b,c)
print(zz)

x,y,z=zip(*zz)
print(x)
print(y)
print(z)

输出:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
(1, 2, 3)
(4, 5, 6)
(7, 8, 9)

filter函数

用来过滤序列的(python3中返回的是迭代器,而在python2中返回的列表)

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

语法

filter(function, iterable)
#function -- 判断函数。
#iterable -- 可迭代对象。

案例

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
def is_odd(n):
    return n % 2 == 1
 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)


#[1, 3, 5, 7, 9]

七.map函数和reduce函数

Python内建了map()reduce()函数。

如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。

我们先看map。map()函数接收两个参数,一个是函数,一个是序列map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现。

def f(x):
    return x*x

list1=[1,2,3,4,5,6,7,8,9]
list2=map(f,list1)

reduce函数

reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果有点像叠加的效果。

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

案例1: 

def add(x,y):
    return x+y

res=reduce(add,[1,3,5,7,9])   #25 

如果要把序列[1, 3, 5, 7, 9]变换成整数13579,reduce就可以派上用场

def fn(x,y):
    return 10*x+y

res=map(fn,[1,3,5,7,9])   #13579

 先用map转成一个列表,再用reduce进行进行转成int型

def str2int(s):
    def fn(x, y):
        return x * 10 + y
    def char2num(s):#在这个语法中,s是索引号key值,返回的value值,可以使用map来进行操作
        return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    return reduce(fn, map(char2num, s))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值