@myles
2018-04-23T08:52:21.000000Z
字数 1734
阅读 765
老男孩基础
循环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_dirvier
1: ['oldboy', 'oldgirl']
2: rain
3: jack
4: 姗姗
5: peiqi
6: alex
7: black_girl
8: 1
9: 2
10: 3
11: 4
9: 2
13: 5
14: 6
9: 2
(1)参考代码
直接使用len()
先计算出整个names列表的长度,然后配置使用range()
函数生成一个可迭代的列表逐次打印和取出names列表中的元素,并格式化后打印出来。
for x in range(len(names)):
y = names[x]
print("%s: %s"%(x,y))
0: old_dirvier
1: ['oldboy', 'oldgirl']
2: rain
3: jack
4: 姗姗
5: peiqi
6: alex
7: black_girl
8: 1
9: 2
10: 3
11: 4
12: 2
13: 5
14: 6
15: 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)