前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Python]迭代和对象的可迭代性

[Python]迭代和对象的可迭代性

作者头像
祥知道
发布2020-03-10 17:01:48
1K0
发布2020-03-10 17:01:48
举报
文章被收录于专栏:祥的专栏

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:https://cloud.tencent.com/developer/article/1596478


文章目录

代码语言:txt
复制
- @[toc]环境基础概念1.1. 引言1.2. 可迭代与迭代器的区别应用2.1. 字典dict的迭代2.2. 字符串str的迭代判断对象的可迭代性和获得获取迭代索引3.1. 判断对象的可迭代性3.2. 迭代的同时获得迭代索引(下标)eg.1.eg.2.eg.3.参考文献

Python迭代和对象的可迭代性

Python文档整理目录: https://blog.csdn.net/humanking7/article/details/80757533

0. 环境

  • Python 3.6

1. 基础概念

1.1. 引言

如果给定一个listtuple,我们可以通过for循环来遍历这个listtuple,这种遍历我们称为迭代Iteration)。

Python中,迭代是通过for ... in来完成的,而很多语言比如C语言,迭代是通过下标完成的,eg:

代码语言:javascript
复制
int buf[100] = {...};
for(int i=0; i<100; 1++){
 	int a = buf[i]
    // do something
}

1.2. 可迭代与迭代器的区别

可迭代

Python中如果一个对象有__iter__( )方法或__getitem__( )方法,则称这个对象是可迭代的(Iterable);其中__iter__( )方法的作用是让对象可以用for ... in循环遍历,__getitem__( )方法是让对象可以通过“实例名[index]”的方式访问实例中的元素。换句话说,两个条件只要满足一条,就可以说对象是可迭代的。显然列表List元组Tuple字典Dictionary字符串String等数据类型都是可迭代的。当然因为Python的**“鸭子类型”**,我们自定义的类中只要实现了__iter__( )方法或__getitem__( )方法,也是可迭代的。

迭代器

Python中如果一个对象有__iter__( )方法和__next__( )方法,则称这个对象是迭代器Iterator);其中__iter__( )方法是让对象可以用for ... in循环遍历,__next__( )方法是让对象可以通过next(实例名)访问下一个元素。

注意:这两个方法必须同时具备,才能称之为迭代器列表List元组Tuple字典Dictionary字符串String等数据类型虽然是可迭代的,但都不是迭代器,因为他们都没有next( )方法

2. 应用

2.1. 字典dict的迭代

只要是可迭代对象,无论有无下标都可以迭代,比如dict就可以迭代:

代码语言:javascript
复制
In [1]: d = {'a': 1, 'b': 2, 'c': 3}
  1. 默认情况下,dict迭代的是key
代码语言:javascript
复制
In [2]: for key in d:
   ...:     print(key)
   ...:
a
b
c
  1. 如果要迭代value,可以用for value in d.values()
代码语言:javascript
复制
In [3]: for value in d.values():
   ...:     print(value)
   ...:
1
2
3
  1. 如果要同时迭代keyvalue,可以用for k, v in d.items()
代码语言:javascript
复制
In [4]: for k,v in d.items():
   ...:     print('key:', k, ', value:', v)
   ...:
key: a , value: 1
key: b , value: 2
key: c , value: 3

注意: 因为dict的存储不是按照list的方式顺序排列,所以迭代出的结果顺序很可能不一样。

2.2. 字符串str的迭代

代码语言:javascript
复制
In [5]: for ch in 'hello':
   ...:     print('char is:%c' % ch)
   ...:
char is:h
char is:e
char is:l
char is:l
char is:o

3. 判断对象的可迭代性和获得获取迭代索引

3.1. 判断对象的可迭代性

1.2节可知,如果对象类中含有__iter__( )方法或__getitem__( )方法,则称这个对象是可迭代的(Iterable),那么如何判断呢?方法是通过collections模块的Iterable类型判断:

代码语言:javascript
复制
In [7]: from collections import Iterable

In [8]: isinstance('hello', Iterable)  # 字符串str可迭代
Out[8]: True

In [9]: isinstance([1, 2, 3], Iterable)  # 列表list可迭代
Out[9]: True

In [10]: isinstance({}, Iterable)  # 字典dict可迭代
Out[10]: True

In [11]: isinstance(996, Iterable)  # 整型int 不可迭代
Out[11]: False

In [12]: isinstance(99.6, Iterable)  # float 不可迭代
Out[12]: False

3.2. 迭代的同时获得迭代索引(下标)

Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引元素本身

eg.1.

代码语言:javascript
复制
# d = {'a': 1, 'b': 2, 'c': 3}
In [15]: for i,key in enumerate(d):
    ...:     print(i,' ',key)
    ...:
0   a
1   b
2   c

eg.2.

代码语言:javascript
复制
In [16]: for i, ele in enumerate(['a','b','c']):
    ...:     print(i,' ',ele)
    ...:
0   a
1   b
2   c

eg.3.

代码语言:javascript
复制
In [17]: for i, ele in enumerate('hello'):
    ...:     print(i,' ',ele)
    ...:
0   h
1   e
2   l
3   l
4   o

4. 参考文献

廖雪峰Python教程:https://www.liaoxuefeng.com/wiki/1016959663602400/1017316949097888


OK!

以上,Enjoy~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 0. 环境
  • 1. 基础概念
    • 1.1. 引言
      • 1.2. 可迭代与迭代器的区别
      • 2. 应用
        • 2.1. 字典dict的迭代
          • 2.2. 字符串str的迭代
          • 3. 判断对象的可迭代性和获得获取迭代索引
            • 3.1. 判断对象的可迭代性
              • 3.2. 迭代的同时获得迭代索引(下标)
                • eg.1.
                • eg.2.
                • eg.3.
            • 4. 参考文献
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档