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