《利用python进行数据分析》第三章内建数据结构,函数,文件

3.1.3.3 zip

  • zip将列表,元组或者其他序列的元素列表配对,新建一个元组的列表:
  • zip可以处理任意长度的序列,生成的列表序列有最短的决定
seq1 = ['foo','bar','baz']

seq2 = ['one','two','three']

zipped = zip(seq1,seq2)

list(zipped)
Out[5]: [('foo', 'one'), ('bar', 'two'), ('baz', 'three')]
  • zip常用场景:同时遍历多个序列
seq3 = [False,True]

list(zip(seq1,seq2,seq3))
Out[7]: [('foo', 'one', False), ('bar', 'two', True)]

for i, (a,b) in enumerate(zip(seq1,seq2)):
    print('{0}:{1},{2}'.format(i,a,b))
    
0:foo,one
1:bar,two
2:baz,three

3.1.3.4 reversed

  • reversed函数将序列的元素倒序排列
list(reversed(range(10)))
Out[9]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

3.1.4字典dict

  • 字典也叫哈希表或者关联数组,键和值都是python对象
  • 可以访问,插入,设置字典中的元素
empty_dict = {}

d1 = {'a':'some value','b':[1,2,3,4]}

d1[7] = 'an integer'

d1
Out[13]: {7: 'an integer', 'a': 'some value', 'b': [1, 2, 3, 4]}

d1['b']
Out[14]: [1, 2, 3, 4]

3.1.4.1从列表生成字典

mapping = dict(zip(range(5),reversed(range(5))))

mapping
Out[16]: {0: 4, 1: 3, 2: 2, 3: 1, 4: 0}

3.1.4.2默认值

  • 字典的get和pop方法会返回一个默认值
  • value = some_dict.get(key,default_value)
  • 带有默认值的get会在key参数不是字典的键时返回一个None,pop会返回一个异常
  • 想要生成一个符合要求的字典,可以向字典中传入类型或者能在各位置生成默认值的函数

3.1.4.3有效的字典键类型

  • 字典的值可以是任何对象,但键必须是不可变的对象(标量类型(整型,浮点数,字符串)或者元组(元组内对象也必须是不可变的))
  • 使用hash()函数可以检查一个对象是否可以哈希化(即是否可以用作字典的键)

hash((1,2,(2,3)))
Out[18]: 1097636502276347782

hash((1,2,[2,3]))#因为列表是可变的,失败
Traceback (most recent call last):

  File "<ipython-input-19-576218ff90d3>", line 1, in <module>
    hash((1,2,[2,3]))

TypeError: unhashable type: 'list'
  • 可以将列表变为元组,从而元组的所有对象可以哈希化,则列表可以哈希化

3.1.5集合

  • 集合是一种无序且元素唯一的容器
  • set()函数创建集合或者直接{}创建
  • 集合支持数学上的联合,交集,差集,对称差集
a  = {1,2,3,4,5}

b = {3,4,5,6,7,8}

a.union(b)#联合
Out[22]: {1, 2, 3, 4, 5, 6, 7, 8}

a | b#并集
Out[23]: {1, 2, 3, 4, 5, 6, 7, 8}

a.intersection(b)
Out[24]: {3, 4, 5}

a & b
Out[25]: {3, 4, 5}

3.1.6列表,集合,字典的推导式

  • 列表的推导式允许过滤一个容器的元素,用一种简单的表达式转换传递给过滤器的元素

  • 生成一个新的列表
  • [expr for val in collection if condition]
strings = ['a','as','bat','car','dove','python']
[x.upper() for x in strings if len(x) > 2]#把字符串长度小于2的过滤掉
Out[28]: ['BAT', 'CAR', 'DOVE', 'PYTHON']
  • 字典的推导式:

  • dict_comp = {key-expr: value-expr for value in collection}
  • 集合的推导式:

  • set_comp = {expr for val in collection if condition}
  • 创建一个集合,集合里包含列表中字符串的长度
unique_lengths = {len(x) for x  in strings}

unique_lengths
Out[30]: {1, 2, 3, 4, 6}

3.1.6.1嵌套列表推导式

3.2函数

3.2.4匿名函数lambda()

  • lambda x: x*x  等价于:def f(x):  return x*x
  • 匿名函数对象自身并没有一个显式的__name__属性

3.2.6生成器

  • 通过一致的方式遍历序列,例如对列表中的对象或者文件中的一行行内容
  • 此特性是通过迭代器协议实现的,迭代器协议是一种令对象可遍历的通用方式。
  • 迭代器就是一种用于在上下文中(比如for循环)向python解释器生成对象的对象
  • 生成器是构造新的可遍历对象的一种比较简洁的方式,一般的函数执行并返回单个结果,生成器返回一个多结果的序列
  • 创建一个生成器,将函数中返回关键字return替换成yield

3.2.7错误和异常处理

  • def attempt_float(X):
        try:
            return float(x)
        except:
            return x
  • def attempt_float(X):
        try:
            return float(x)
        except ValueError:
            return x
  • def attempt_float(X):
        try:
            return float(x)
        except (TypeError,ValueError):
            return x

3.3文件与操作系统

重要的python文件方法

方法 描述 f.read([size]) 将文件数据作为字符串返回,size控制读取的字节数 f.readline([size]) 返回文件中行内容的列表,size参数可选 f.write(str) 将字符串写入文件 f.writelines(strings) 将字符串序列写入文件 f.close() 关闭文件 f.flush 将内部I/O缓冲器内容刷新到硬盘 f.seek(pos) 移动到指定的位置(整数) f.tell() 返回当前的文件位置,返回值是整数 f.closed() 如果文件已关闭,返回TRUE

3.3.1字节与Unicode文件

  • 默认的python是文本模式,所以需要处理python字符串(Unicode)

猜你喜欢

转载自blog.csdn.net/lurong66/article/details/88117086
今日推荐