迭代器

一、Python的数据结构

  • 容器(container)、
  • 可迭代对象(iterable)、
  • 迭代器(iterator)、
  • 生成器(generator)、
  • 列表/集合/字典推导式(list,set,dict comprehension)

二、几个数据结构

  • 1、容器(container)

    可以理解为一个盒子,用来装各种数据,主要包括以下几种数据结构:

    • list
    • set
    • dict
    • tuple
    • str

    容器常见的使用,判断一个元素是否包含在容器里面或者不包括,用in或者not in

    # list
    assert 2 in [1, 2, 3]
    assert 4 not in [1, 2, 3]
    # set
    assert 1 in {1, 2, 3}
    assert 4 not in {1, 2, 3}
    # tuple
    assert 1 in (1, 2, 3)
    assert 4 not in (1, 2, 3)
    # dict
    assert 'foo' in {'foo': '哈哈'}
    # str
    assert 'h' in 'hello'
    
  • 2、可迭代对象(iterable)

    很多容器都是属于可迭代对象(需要改造下)

      list1 = [1, 2, 3, 4]
      str1 = 'hello word'
      dict1 = {'nane': '哈哈', 'gender': '男'}
      tup = (1, 2, 3, 4)
      set1 = {1, 2, 3, 4}
    
      # 使用iter把容器改改造成可迭代对象
      iter_list1 = iter(list1)
      print(type(iter_list1))
      # 迭代器不管是使用next()或者 __next__()都一样的
      print(next(iter_list1))
      print(iter_list1.__next__())
    
      # 使用__iter__()一样的可以把容器改为一个可迭代对象
      iter_str = str1.__iter__()
      print(iter_str.__next__())
    
  • 3、迭代器(iterator)

    为什么要有迭代器呢?它是一个带状态的对象,他能再你调用next()方法的时候返回容器中的下一个值 实现了__iter____next__()

    • 1、for..in遍历字典的原理

      dict1 = {'name': '哈哈', 'gender': '男', 'age': 20}
      
      for key in dict1:
          print('{0}--{1}'.format(key, dict1[key]))
      
      • 执行in后对象的dic.__iter()方法,得到一个迭代器对象iter_dic
      • 执行next(iter_dic)将得到的值赋值给key,然后执行循环体代码
      • 重复过程2,直到捕获到异常stopIteration,结束循环

三、判断是否可迭代对象

  • 1、导包

    from collections import Iterable
    
  • 2、测试

    print(isinstance([], Iterable))
    print(isinstance({}, Iterable))
    print(isinstance((), Iterable))
    print(isinstance('hello', Iterable))
    print(isinstance('100', Iterable))
    print(isinstance(100, Iterable))
    

results matching ""

    No results matching ""