快速掌握Python中的循环技术

发表于:2021-3-09 09:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:今日头条

  1. 使用enumerate()循环整个序列
  当循环遍历一个序列(如列表、元组、范围对象、字符串)时,可以使用enumerate()函数同时检索位置索引和相应的值。
  (1) 使用enumerate()遍历列表:
  示例1:
  使用enumerate()函数遍历列表,返回一个包含可迭代对象中的计数和值的元组。一般情况下,计数从0开始。
  colors=['red','green','blue'] 
  for color in enumerate(colors): 
      print (color) 
  #Output: 
  (0, 'red') 
  (1, 'green') 
  (2, 'blue') 
  示例2:
  count从5开始循环迭代器。
  colors=['red','green','blue'] 
  for color in enumerate(colors,5): 
      print (color) 
  ''' 
  Output: 
  (5, 'red') 
  (6, 'green') 
  (7, 'blue') 
  ''' 
  (2) 使用enumerate()循环字符串:
  示例:
  使用enumerate()函数遍历字符串将返回一个包含可迭代对象的计数和值的元组。一般情况下,计数从0开始。
  s='python' 
  for i in enumerate(s): 
      print (i) 
  '''     
  #Output: 
  (0, 'p') 
  (1, 'y') 
  (2, 't') 
  (3, 'h') 
  (4, 'o') 
  (5, 'n') 
  ''' 
  2. 使用zip()函数循环两个或多个序列
  要同时循环两个或多个序列,可以使用zip()函数对条目进行配对。
  (1) 使用zip()循环两个相同长度的序列
  示例:
  num = [1, 2, 3] 
  colors= ['red', 'blue', 'green'] 
  for i in zip(num, colors): 
      print(i) 
   
  ''' 
  Output: 
  (1, 'red') 
  (2, 'blue') 
  (3, 'green') 
  '' 
  (2) 使用zip()循环两个不同长度的序列
  如果使用zip()遍历两个长度不同的序列意味着当最短的可迭代对象耗尽时停止。
  示例:
  colors=['red','green','blue'] 
  num=[1,2,3,4,5,6,7,8,9,10] 
  for i in zip(colors,num): 
      print (i) 
  ''' 
  Output: 
  ('red', 1) 
  ('green', 2) 
  ('blue', 3) 
  ''' 
  (3) 使用zip()循环两个或多个序列:
  示例:
  colors=['red','apple','three'] 
  num=[1,2,3] 
  alp=['a','b','c'] 
  for i in zip(colors,num,alp): 
      print (i) 
  ''' 
  Output: 
  ('red', 1, 'a') 
  ('apple', 2, 'b') 
  ('three', 3, 'c') 
  ''' 
  3. itertools.zip_longest ()
  创建一个从每个可迭代对象中聚合元素的迭代器。如果可迭代对象的长度不均匀,则用fillvalue填充缺失的值。迭代继续,直到最长的可迭代对象耗尽。
  使用itertools.zip_longest()循环两个不同长度的序列。
  示例1:如果不指定fillvalue,则默认为None。
  from itertools import zip_longest 
  colors=['red','apple','three'] 
  num=[1,2,3,4,5] 
  for i in zip_longest(colors,num): 
      print (i) 
  ''' 
  Output: 
  ('red', 1) 
  ('apple', 2) 
  ('three', 3) 
  (None, 4) 
  (None, 5) 
  ''' 
  示例2:指定fillvalue。
  from itertools import zip_longest 
  colors=['red','apple','three'] 
  num=[1,2,3,4,5] 
  for i in zip_longest(colors,num,fillvalue='z'): 
      print (i) 
  ''' 
  Output: 
  ('red', 1) 
  ('apple', 2) 
  ('three', 3) 
  ('z', 4) 
  ('z', 5) 
  ''' 
  4. 使用sorted()函数按已排序的顺序循环序列
  sorted():从iterable中的项返回一个新的排序列表。
  示例:1使用sorted()函数按排序(升序)遍历序列(list)。
  num=[10,5,20,25,30,40,35] 
  for i in sorted(num): 
      print (i) 
  ''' 
  Output: 
  5 
  10 
  20 
  25 
  30 
  35 
  40 
  ''' 
  示例2:使用sorted()函数按排序(降序)遍历序列(list)。
  num=[10,5,20,25,30,40,35] 
  for i in sorted(num,reverse=True): 
      print (i) 
  ''' 
  Output: 
  40 
  35 
  30 
  25 
  20 
  10 
  5 
  ''' 
  示例3:使用sorted()函数按排序(升序)遍历字典。默认情况下,它将对字典中的键进行排序。
  d={'f':1,'b':4,'a':3,'e':9,'c':2} 
  for i in sorted(d.items()): 
      print (i) 
  #Output: 
  ('a', 3) 
  ('b', 4) 
  ('c', 2) 
  ('e', 9) 
  ('f', 1) 
  示例4:使用已排序的函数按已排序的顺序循环字典。在已排序的函数中使用key参数,根据字典的值对其排序。
  d={'f':1,'b':4,'a':3,'e':9,'c':2} 
  #sorting by values in the dictionary 
  for i in sorted(d.items(),key=lambda item:item[1]): 
      print (i) 
       
  #Output: 
  ('f', 1) 
  ('c', 2) 
  ('a', 3) 
  ('b', 4) 
  ('e', 9) 
  5. 使用reversed()函数遍历序列
  reversed(seq):
  返回反向迭代器。seq必须是一个具有__reversed__()方法或支持序列协议(__len__()方法和__getitem__()方法,参数从0开始)的对象。
  示例:
  反向循环一个序列,然后调用reversed()函数。
  colors=['red','green','blue','yellow'] 
  for i in reversed(colors): 
      print (i) 
  ''' 
  Output: 
  yellow 
  blue 
  green 
  red 
  ''' 
  6. 循环查找字典
  当循环遍历字典时,可以使用items()方法同时检索键和相应的值。
  示例:
  d={'a':1,'b':2,'c':3} 
  for k,v in d.items(): 
      print (k,v) 
  #Output: 
  a 1 
  b 2 
  c 3 
  7. 在迭代时修改集合
  在遍历同一个集合时修改集合的代码可能很难正确处理。相反,循环遍历集合的副本或创建一个新集合通常更简单。
  策略1:对副本进行迭代
  如果希望在迭代时删除字典中的项,则在字典的副本上进行迭代:
  d={'a':1,'b':2,'c':3} 
  for k,v in d.copy().items(): 
      if v%2==0: 
          del d[k] 
  print (d) 
  #Output:{'a': 1, 'c': 3} 
  策略2:创建一个新的集合
  d={'a':1,'b':2,'c':3} 
  d1={} 
  for k,v in d.items(): 
      if v%2!=0: 
          d1[k]=v 
  print (d1) 
  #Output:{'a': 1, 'c': 3} 
  print (d) 
  #Output:{'a': 1, 'b': 2, 'c': 3} 

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号