一.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))