Python 迭代列表并向新列表追加值

Python 迭代列表并向新列表追加值,python,list,Python,List,我试图遍历一个列表,测试一个条件,当条件满足时,将匹配的值附加到一个新的空白列表中。第一次满足条件时,匹配的值应附加到新列表@索引0。第二次,是索引1,等等。问题是,它在新列表的附加索引处,与我迭代的原始列表中包含的索引相同。如果有人知道如何解决这个问题,我将非常感激 for i in range(len(tweets)): #contains list of dictionaries if tweets[i].get('text') is not None: stri

我试图遍历一个列表,测试一个条件,当条件满足时,将匹配的值附加到一个新的空白列表中。第一次满足条件时,匹配的值应附加到新列表@索引0。第二次,是索引1,等等。问题是,它在新列表的附加索引处,与我迭代的原始列表中包含的索引相同。如果有人知道如何解决这个问题,我将非常感激

for i in range(len(tweets)): #contains list of dictionaries 
    if tweets[i].get('text') is not None:
        string = tweets[i].get('text')
        tweet_text.append(re.findall(r"#(\w+)", string))
打印tweet_文本将显示以下内容:

[[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [u'easybranches', u'SEO', u'marketing', u'influence', u'social', u'leadership', u'brand', u'branding'], []]

re.findall
总是返回一些内容。如果未找到匹配项,则返回空列表。每次正则表达式不匹配时,都会附加一个空列表

如果只想在找到匹配项时追加,则需要在该条件下进行测试:

for tweet in tweets: #contains list of dictionaries 
    text = tweet.get('text')
    if text is not None:
        matches = re.findall(r"#(\w+)", text)
        # Test whether any matches were found
        if matches:
            tweet_text.append(matches)
您还可以使用
get
的空字符串默认值来折叠这两个条件:

for tweet in tweets: #contains list of dictionaries 
    matches = re.findall(r"#(\w+)", tweet.get('text', ''))
    if matches:
        tweet_text.append(matches)

如果没有文本,则使用
get('text','')
返回空字符串;然后,
findall
将始终工作,如果没有找到匹配项,只返回一个空列表


我也改变了你的循环。不需要迭代索引;直接迭代
tweets

中的tweets,您是否考虑过条件每次都匹配,而不是正则表达式的可能性?此外,您可以直接迭代列表,而不是使用
for tweet in tweets
findall
将始终返回列表,从0迭代到列表长度。如果没有匹配项,它将返回一个空列表。所以它在做你要求它做的事情。你打算怎么做?
strs=[t.get('text'),如果t中有'text',则在tweets中为t,然后使用
map`使用此列表也是可能的。或者甚至类似于:
对于[t.get('text')中的s,如果t中有'text',则在tweets中有'text':