将列表[3,7,0,5,1,8]中大于5元素置为0,小于5的元素置为1

1先给大家展示一个我自己最先做的一个错误示范:

list1 = [3,7,0,5,1,8]

for i in list1:
    if int(i) < 5:
        list1[list1.index(i)]=0

    else:
        list1[list1.index(i)] = 1

print('置换过后的list1为:',list1)

输出的结果为:

置换过后的list1为: [0, 0, 0, 1, 1, 1]

可惜顺序乱了。原因是因为index是从左往右查找第一个匹配值就返回,大于五的数在被替换成1过后,如果后面的元素有数字一的话就会出现问题。

2一个投机取巧的方法:

我创建了一个空列表来保存我替换后的值然后直接把列表2的值赋值给了列表1

list1 = [3,7,0,5,1,8]
list2 = []
for i in list1:
    if int(i) < 5:
        list2.append(0)
    elif i == 5:
        list2.append(5)
    else:
        list2.append(1)
list1 = list2
print('置换过后的list1为:',list1)

输出的结果为:

置换过后的list1为: [0, 1, 0, 5, 0, 1]

这次顺序正常了。虽然这样实现目的了,但是增加了一个列表会占用计算机内存,是一个投机取巧的方法。

3老师给我演示的方法

list1 = [3,7,0,5,1,8]
for index,i in enumerate(list1):
    if i < 5:
        list1[index] = 0
    elif i > 5:
        list1[index] = 1
print('置换过后的list1为:', list1)

输出的结果为:

置换过后的list1为: [0, 1, 0, 5, 0, 1]

我忘记了老师前面讲过一个enumerate函数,enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

希望大家可分享一些建议,和一些新方法给我,谢谢大家!!!

猜你喜欢

转载自www.cnblogs.com/ldmb/p/11973323.html