如何使用if语句和'elif'清理条目中的列表?

时间:2014-02-23 10:59:39

标签: python python-2.7

首先,我有一个包含各种链接的列表。例如:

imagelinks = [
'http://24.media.tumblr.com/e13983b2fcfa441eb18861cf3e9bc0e9/tumblr_mzzdmmkoS81r2gyhfo1_500.jpg',
'A%2F%2F31.media.tumblr.com%2Favatar_c3eb4dbb6150_64.png'
'http://31.media.tumblr.com/avatar_c3eb4dbb6150_16.png'
'http://24.media.tumblr.com/tumblr_lyrqzcl2Mf1rnn3koo1_1280.jpg'

等等。我想要做的只是留下以1280结尾的链接。所以我写了这个代码来帮助清理列表:

def cleanImageLinks():
global imagelinks
removed = 0
for link in imagelinks:
    if link[27:33] == 'avatar':
        imagelinks.remove(link)
        removed += 1
    elif link[len(link)-6:len(link)-4] == '16':
        imagelinks.remove(link)
        removed += 1
    elif link[len(link)-6:len(link)-4] == '40':
        imagelinks.remove(link)
        removed += 1
    elif link[len(link)-6:len(link)-4] == '00':
        imagelinks.remove(link)
        removed += 1
    elif link[len(link)-6:len(link)-4] == '28':
        imagelinks.remove(link)
    elif link[0] == "A":
        imagelinks.remove(link)
        removed += 1
    else:
        pass
print str(removed) + " entries removed!"

所以最后我得到“删除了436个条目”,但是当我打印列表时,我仍然可以找到链接,我不想到处都是。由于列表超过2000个条目,436个​​并不多。我该怎么办?

1 个答案:

答案 0 :(得分:0)

请勿使用列表理解修改原件,创建新原件:

In [1036]: imagelinks = [
      ...: 'http://24.media.tumblr.com/e13983b2fcfa441eb18861cf3e9bc0e9/tumblr_mzzdmmkoS81r2gyhfo1_500.jpg',
      ...: 'A%2F%2F31.media.tumblr.com%2Favatar_c3eb4dbb6150_64.png',
      ...: 'http://31.media.tumblr.com/avatar_c3eb4dbb6150_16.png',
      ...: 'http://24.media.tumblr.com/tumblr_lyrqzcl2Mf1rnn3koo1_1280.jpg']

In [1043]: newlinks=[i for i in imagelinks if i.split('.')[-2].endswith('1280')]
      ...: print newlinks
      ...: print '%d links are removed.'%(len(imagelinks)-len(newlinks))
#outputs:
['http://24.media.tumblr.com/tumblr_lyrqzcl2Mf1rnn3koo1_1280.jpg']
3 links are removed.