@myles
2018-04-23T08:52:21.000000Z
字数 1734
阅读 849
老男孩基础
循环names列表,打印每个元素索引值和元素
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]
个人思路:我的做题思路是直接使用 name.index() 来读取每个列表元素的索引(天真的我!!!)
['old_dirvier', ['oldboy', 'oldgirl'], 'rain', 'jack', '\xe5\xa7\x97\xe5\xa7\x97', 'peiqi', 'alex', 'black_girl', 1, 2, 3, 4, 2, 5, 6, 2]print(names)for x in names:y = names.index(x) # 错误的索引提取print("%s: %s"%(y,x))
打印效果:通过打印的效果,发现从索引11开始,后面的索引并不是12,而是9,而且9还出现了2次,此时的我就卡主了,一直问自己为什么啊?为什么啊?最后我还是没想出来,请教组长后才知道,是names.index()方法只能取到第一个匹配到的元素索引值,而names列表中2这个元素出现了3次,每次你使用names.index(2)去取索引时,它都只是匹配了9。
['old_dirvier', ['oldboy', 'oldgirl'], 'rain', 'jack', '\xe5\xa7\x97\xe5\xa7\x97', 'peiqi', 'alex', 'black_girl', 1, 2, 3, 4, 2, 5, 6, 2]0: old_dirvier1: ['oldboy', 'oldgirl']2: rain3: jack4: 姗姗5: peiqi6: alex7: black_girl8: 19: 210: 311: 49: 213: 514: 69: 2
(1)参考代码
直接使用len()先计算出整个names列表的长度,然后配置使用range()函数生成一个可迭代的列表逐次打印和取出names列表中的元素,并格式化后打印出来。
for x in range(len(names)):y = names[x]print("%s: %s"%(x,y))
0: old_dirvier1: ['oldboy', 'oldgirl']2: rain3: jack4: 姗姗5: peiqi6: alex7: black_girl8: 19: 210: 311: 412: 213: 514: 615: 2
对作业第10题,同样可以使用大王教的enumerate()函数来直接枚举出列表对象索引与对应的元素。
使用enumerate()函数直接对列表内容进行枚举可以获取一个元组对象,其包含了索引与元素。
# enumerate()方法for x in enumerate(names):print(x)
(0, 'old_dirvier')(1, ['oldboy', 'oldgirl'])(2, 'rain')(3, 'jack')(4, '\xe5\xa7\x97\xe5\xa7\x97')(5, 'peiqi')(6, 'alex')(7, 'black_girl')(8, 1)(9, 2)(10, 3)(11, 4)(12, 2)(13, 5)(14, 6)(15, 2)
为了分别获取索引与元素,可以使用for循环结合2个变量获取enumerate()生成的元组内容,具体操作如下;
for index,x in enumerate(names):print(index,x)(0, 'old_dirvier')(1, ['oldboy', 'oldgirl'])(2, 'rain')(3, 'jack')(4, '\xe5\xa7\x97\xe5\xa7\x97')(5, 'peiqi')(6, 'alex')(7, 'black_girl')(8, 1)(9, 2)(10, 3)(11, 4)(12, 2)(13, 5)(14, 6)(15, 2)