当字符串以字符串开头或包含" @","#"," 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;
答案 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
循环中添加打印语句,您将看到我的意思。