定义:zip([iterable,...])
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)
说明zip的一些使用方法:
a = [1,2,3]
b = [4,5,6]
zipped = zip(a,b)
print zipped
b = zip(*zipped)
print b
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [ [row [col] for row in a] for col in range(len(a[0]))]
print b
c = zip(*a)
print c
d = map(list,zip(*a))
print d
运行结果:
[(1, 4), (2, 5), (3, 6)]
[(1, 2, 3), (4, 5, 6)]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
zip的使用场景:
1、在一个循环中,同时访问多个可迭代的对象,比如列表等。不想写多个循环来遍历不同的可迭代对象。
a = [1,2,3]
b = [3,4,5]
for item in zip(a,b):
print type(item)
print item[0]
print item[1]
2、使用两个可迭代的对象来构造字典。
a = [1,2,3]
b = [3,4,5]
z = zip(a,b)
d = dict(z)
print z
print d
collections.defaultdict lambda:
defaultdict是字典类型,可以为defaultdict设置默认值,可以通过lambda设置默认值。
下面举几个例子:
from collections import *
x = defaultdict(lambda:0) //默认值是0
print x[0]
y =defaultdict(lambda:defaultdict(lambda:0))//默认值是一个字典,字典的默认值是0
print y[0]
z = defaultdict(lambda:[0,0,0])//默认值是一个列表,[0,0,0].
print z[0]
输出结果:
0
defaultdict(
[0, 0, 0]
csv.DictReader:
处理csv文件的函数库:
DictWriter,DictReader:读写带header的csv文件(类似表格)。
csv.reader,csv.writer:读写未带header的csv文件
import csv
FIELDS = ['Name', 'Sex', 'E-mail', 'Blog']
# DictWriter
csv_file = open('test.csv', 'wb')
writer = csv.DictWriter(csv_file, fieldnames=FIELDS) //写表头
# write header
print (zip(FIELDS,FIELDS))
print (dict(zip(FIELDS, FIELDS)))
writer.writerow(dict(zip(FIELDS, FIELDS)))
d = {}
d['Name'] = 'Qi'
d['Sex'] = 'Male'
d['E-mail'] = '[email protected]'
d['Blog'] = 'http://www.redicecn.com'
writer.writerow(d)
csv_file.close()
# For results, please see following picture
# DictReader
# A easier way for skipping the header
# Usually we need a extra flag variables
for d in csv.DictReader(open('test.csv', 'rb')): //读出来的格式是dict
print d
# Output:
# {'Blog': 'http://www.redicecn.com', 'E-mail': '[email protected]', 'Name': 'Qi', 'Sex': 'Male'}
subprocess :开子进程执行脚本,谨记,一定要将脚本使用chmod变成可执行的。
import subprocess
cmd = './pre-b.py'
subprocess.call(cmd, shell=True)
必须先把pre-b.py改为可执行的。
-rwxr-xr-x 1 lujiandong lujiandong 3754 11月 19 10:24 pre-b.py*
如果pre-b.py是不可执行的,即:
-rw-rw-r-- 1 lujiandong lujiandong 3754 11月 19 10:24 pre-b.py
那么上面的方法就会报错: