[关闭]
@myles 2018-04-23T16:52:21.000000Z 字数 1734 阅读 736

列表练习题踩得坑

老男孩基础


1. 索引遍历

1.1 题目要求

循环names列表,打印每个元素索引值和元素

  1. names = ['old_dirvier', ['oldboy', 'oldgirl'], 'rain', 'jack', '\xe5\xa7\x97\xe5\xa7\x97', 'peiqi', 'alex', 'black_girl', 1, 2, 3, 4, 2, 5, 6, 2]

1.2 错误示范

个人思路:我的做题思路是直接使用 name.index() 来读取每个列表元素的索引(天真的我!!!)

  1. ['old_dirvier', ['oldboy', 'oldgirl'], 'rain', 'jack', '\xe5\xa7\x97\xe5\xa7\x97', 'peiqi', 'alex', 'black_girl', 1, 2, 3, 4, 2, 5, 6, 2]
  2. print(names)
  3. for x in names:
  4. y = names.index(x) # 错误的索引提取
  5. print("%s: %s"%(y,x))

打印效果:通过打印的效果,发现从索引11开始,后面的索引并不是12,而是9,而且9还出现了2次,此时的我就卡主了,一直问自己为什么啊?为什么啊?最后我还是没想出来,请教组长后才知道,是names.index()方法只能取到第一个匹配到的元素索引值,而names列表中2这个元素出现了3次,每次你使用names.index(2)去取索引时,它都只是匹配了9

  1. ['old_dirvier', ['oldboy', 'oldgirl'], 'rain', 'jack', '\xe5\xa7\x97\xe5\xa7\x97', 'peiqi', 'alex', 'black_girl', 1, 2, 3, 4, 2, 5, 6, 2]
  2. 0: old_dirvier
  3. 1: ['oldboy', 'oldgirl']
  4. 2: rain
  5. 3: jack
  6. 4: 姗姗
  7. 5: peiqi
  8. 6: alex
  9. 7: black_girl
  10. 8: 1
  11. 9: 2
  12. 10: 3
  13. 11: 4
  14. 9: 2
  15. 13: 5
  16. 14: 6
  17. 9: 2

1.3 参考方法

  1. for x in range(len(names)):
  2. y = names[x]
  3. print("%s: %s"%(x,y))
  1. 0: old_dirvier
  2. 1: ['oldboy', 'oldgirl']
  3. 2: rain
  4. 3: jack
  5. 4: 姗姗
  6. 5: peiqi
  7. 6: alex
  8. 7: black_girl
  9. 8: 1
  10. 9: 2
  11. 10: 3
  12. 11: 4
  13. 12: 2
  14. 13: 5
  15. 14: 6
  16. 15: 2

2. enumrate() 函数枚举

对作业第10题,同样可以使用大王教的enumerate()函数来直接枚举出列表对象索引与对应的元素

2.1 enumerate()函数直接枚举

使用enumerate()函数直接对列表内容进行枚举可以获取一个元组对象,其包含了索引元素

  1. # enumerate()方法
  2. for x in enumerate(names):
  3. print(x)
  1. (0, 'old_dirvier')
  2. (1, ['oldboy', 'oldgirl'])
  3. (2, 'rain')
  4. (3, 'jack')
  5. (4, '\xe5\xa7\x97\xe5\xa7\x97')
  6. (5, 'peiqi')
  7. (6, 'alex')
  8. (7, 'black_girl')
  9. (8, 1)
  10. (9, 2)
  11. (10, 3)
  12. (11, 4)
  13. (12, 2)
  14. (13, 5)
  15. (14, 6)
  16. (15, 2)

2.2 enumerate 双变量枚举操作

为了分别获取索引元素,可以使用for循环结合2个变量获取enumerate()生成的元组内容,具体操作如下;

  1. for index,x in enumerate(names):
  2. print(index,x)
  3. (0, 'old_dirvier')
  4. (1, ['oldboy', 'oldgirl'])
  5. (2, 'rain')
  6. (3, 'jack')
  7. (4, '\xe5\xa7\x97\xe5\xa7\x97')
  8. (5, 'peiqi')
  9. (6, 'alex')
  10. (7, 'black_girl')
  11. (8, 1)
  12. (9, 2)
  13. (10, 3)
  14. (11, 4)
  15. (12, 2)
  16. (13, 5)
  17. (14, 6)
  18. (15, 2)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注