涉及while循环和从字符串中删除项目的代码中的错误

时间:2016-10-19 00:57:10

标签: python string while-loop tweepy

我有一个下载推文的代码,我试图通过它将它标记为正面或负面,每次我标记一条推文我想从字符串中删除它所以我不会被要求在这里再次标记它到目前为止是我的代码

while True:
    if len(tweet_list) == 0:
        break
    else:
        tweet1= (np.random.choice(tweet_list))
        print tweet1
        judge = input("1 pos, 2 neg 3 skip: ")
        if judge == 1:
            tweet_pos.append(tweet1)
            tweet_list.remove(tweet1)
        if judge == 2:
            tweet_neg.append(tweet1)
            tweet_list.remove(tweet1)

在我标记第二条推文后,我收到了此错误

ValueError: list.remove(x): x not in list

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

newList = []
for myLetter in myList:
    if myLetter is not 'x':
        newList.append(myLetter)

newString = ''.join(newList)

答案 1 :(得分:0)

在你的while循环之外创建一个空列表,如下所示:

tweet_pos = []
tweet_neg = []
alreadySeen = []

修改代码中的第一个if语句,如下所示:

if len(alreadySeen) == 20:
        break

确保在显示推文时,您要使用tweet1.text。有时它不会正确编码邮件,或根本不编码邮件,因此您可以使用tweet1.text.encode('utf-8')。然后每次做出判断时,将该推文添加到alreadySeen列表中。从此以后,检查它是否已经在该列表中,如果是,则继续获取随机推文,直到它还没有被看到。

if tweet1 not in alreadySeen:
        print tweet1.text.encode('utf-8')
        judge = input("1 pos, 2 neg, 3 skip: ")
        if judge == 1:
            tweet_pos.append(tweet1)
        elif judge == 2:
            tweet_neg.append(tweet1)
        alreadySeen.append(tweet1)

最后,为了确认,您可以通过迭代tweet_postweet_neg中的每条推文输出结果,并像之前一样打印每条推文。

print "My positive tweets: "
for pos in tweet_pos:
    print pos.text.encode('utf-8')

print "My negative tweets: "
for neg in tweet_neg:
    print neg.text.encode('utf-8')

希望这会有所帮助。