如何清理列表中的一些字符串?

时间:2015-06-03 18:41:04

标签: python string contains startswith

当字符串以字符串开头或包含" @","#"," http"时,我试图从列表中删除一些字符串。或" rt"。下面是一个样本列表。

text_words1 = ['@football', 'haberci', '#sorumlubenim', 'dedigin', 'tarafsiz', 'olurrt', '@football', 'saysaniz', 'olur', '#sorumlubenim', 'korkakligin', 'sonu']

根据上面的列表,我想删除' @ football'和'#sorumlubenim'。我试过下面的代码。

 i = 0
 while i < len(text_words1):
     if text_words1[i].startswith('@'):
         del text_words1[i] 
     if text_words1[i].startswith('#'):
         del text_words1[i] 
     i = i+1
 print 'The updated list is: \n', text_words1  

但是,上面的代码只删除了一些字符串,而不是所有以&#34; @&#34;开头的字符串。或&#34;#&#34;符号。

然后,我将下面的代码添加到上面的内容中,因为并非所有感兴趣的字符串都以&#34; @&#34;,&#34;#&#34;开头。或&#34; http&#34;,但包含这些符号。

 while i < len(text_words1):
     if text_words1[i].__contains__('@'):
         del text_words1[i] 
     if text_words1[i].__contains__('#'):
         del text_words1[i]
     if text_words1[i].__contains__('http'):
        del text_words1[i]
     i = i+1
 print 'The updated list: \n', text_words1  

上面的代码删除了一些包含&#34;#:或&#34; @&#34;但不是所有的。

有人可以告诉我如何删除所有以&#34; @&#34;,&#34;#&#34;,&#34; http&#34;或&#34开头的项目; RT&#34;

2 个答案:

答案 0 :(得分:4)

正如评论所指出的那样。根据您的方法,您将失去对列表的参考。因此索引不会迭代整个列表。您可以使用列表理解来删除您不需要的单词

UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
Bundle restrictions = um.getUserRestrictions();
boolean disallowSMS = restrictions.getBoolean(UserManager.DISALLOW_SMS, false);

答案 1 :(得分:3)

这是我的解决方案:

import re
text_words1 = ['@football', 'haberci', '#sorumlubenim', 'dedigin', 'tarafsiz', 'olurrt', '@football', 'saysaniz', 'olur', '#sorumlubenim', 'korkakligin', 'sonu']
for i, word in reversed(list(enumerate(text_words1))):
    if re.search('(@|#|http|rt)', word):
        del text_words1[i]

列表理解:

text_words1 = [w for w in text_words1 if not re.search('(@|#|http|rt)', w)]

请注意,我使用re.search因为它检查字符串中任何位置的匹配项,而re.match仅检查字符串开头的匹配项。这很重要,因为您要删除以/和/或包含这些字符开头的单词。

您的代码段的问题在于您在迭代时删除了项目。由于此原因,len(text_words1)不允许您检查每个列表项。在while循环中添加打印语句,您将看到我的意思。