经验还是很重要的。

  说说今天做的练习吧,还是值得一说的。

  今天做的是,在不改变原有顺序的情况下,进行列表去重。

  本笨蛋经过三个小时的思考与操作,完成了下面代码编写:

chong = ["a","a","a","a","a","a","a","a","a","a","a","a","a","a","b","b","b","b","b","b","s","a","a","a","a","a","a","a","a","c","c","c","c","c","c","c","c","c","c","s","b","s"]
chong_T = chong[::-1]
k = 0
a = []
for i in range(0,len(chong)):
    b = chong.count(chong[i])
    a.append(b)
while k <= max(a):
    s = 0
    t = 0
    while s < len(chong_T):
        if chong_T.count(chong_T[s]) > 1:
            chong_T.remove(chong_T[s])
            s += 1
        else:
            s += 1
    while t < len(chong_T):
        if chong_T.count(chong_T[t]) > 1:
            chong_T.remove(chong_T[t])
            t += 1
        else:
            t += 1
    k += 1
chong_T = chong_T[::-1]
print(chong_T)

    当然嘛,首先想到的一定是利用 count()去计数,如果有重复的,直接 remove()掉。但是,这种思路是不完善的,因为改变了列表的长度,一个固定元素对应的索引值也就改变了,这样,用 s 去遍历索引值,就会发生跳跃的情况。这种跳跃的情况会在某一相同元素连续出现充分多的时候出现。

    这种不完善的方法可以通过“加工”进行完善,那就是重复充分多的次数后,就能达到我们想要的去重效果,于是选定了外层 while 循环,循环次数选定了原列表出现元素最多的那个“最大值”。

    此后,我问了一个大神朋友,人家直接给我扔过来这个:

    

chong = ["a","a","a","a","a","a","a","a","a","a","a","a","a","a","b","b","b","b","b","b","s","a","a","a","a","a","a","a","a","c","c","c","c","c","c","c","c","c","c","s","b","s"]
for x in chong:
    for y in range(len(chong)-1,chong.index(x),-1):
        if chong[y] == x:
            chong.pop(y)
print(chong)

    就几行就搞定了,不需要计数,只需要看元素是否相同就可以了。

    本笨蛋不禁发出了感叹,经验丰富的老油条就是给力,虽说都实现了功能,but 还是越简单越好。

    多多练习吧。

猜你喜欢

转载自www.cnblogs.com/marvelous-dong/p/10991157.html