循环的技巧
2020-03-14 22:54:55
# Python
Python 的 for 语句与 C语言中的不同,它是不支持迭代算术递增数值这种方式的,但Python迭代列表或者字符串等任意序列,元素的迭代顺序与在序列中出现的顺序一致。
比如:
1 | names = ['Python','dart','Swift','Objective-C'] |
在遍历的同时修改序列内容,通常是开发中的大忌,所以执行这种操作时,需要创建一个新的序列或者遍历序列的副本:
1 | names = ['Python','dart','Swift','Objective-C'] |
range() 搭配 len()
内置函数range()常用于遍历数字序列。
如果希望以迭代算术递增数值 这种方式做迭代,通常是以range() + len() 这种方式实现,当然也是对便捷的。
例如,希望获取某个值的下标,可以这样实现:
1 | for i in range(len(names)): |
当然也可以将下标和值仪器打印,像这样:
1 | for i in range(len(names)): |
但这种实现方式,通常使用enumerate()
函数会更加便捷一些。
enumerate()函数
enumerate()函数返回的是一个枚举对象,该枚举对象里是一个个的元组:(index下标, 值)。
1 | for i,v in enumerate(names): |
reversed()函数
reversed()函数是将序列翻转。
假如想将一个list倒序输出的话,可以这样:
1 | for name in reversed(names): |
当然也可以配合range()函数做一些事情,例如将10以内的奇数倒序输出,像这样:
1 | for i in reversed(range(1,10,2)): |
sorted()函数
如果想按指定顺序循环序列,就可以使用sorted()来完成。像这样,在不改动原序列的基础上,返回一个重新的序列:
1 | languages = ['Python','dart','flutter','shell','ruby','Python','Objective-C','Swift','Objective-C'] |
set()函数
set()函数可以去除序列中重复的元素。
如果想’将一个序列中的重复元素去掉,并排序的话,使用set() 和 sorted()函数结合是一个不错的选择,像这样:
1 | for language in sorted(set(languages)): |
zip()函数
同时循环两个或多个序列时,用zip()函数可以将其内的元素一一匹配:
1 | qustions = ['你是什么语言?','很厉害吗?','有什么用处?'] |
如果两个数组的大小不对等,zip()函数仍然能做到一一匹配,并将不能匹配到的元素丢弃掉,而不是抛出异常,这是一个很好的处理方式。
1 | qustions = ['你是什么语言?','很厉害吗?','有什么用处?','其他语言能替代你吗?','你真厉害!'] |