我有一个子串列表,我必须迭代地匹配一个字符串;如果匹配则执行所需的功能。
问题在于,每当我尝试使用循环访问列表时,它都不起作用。否则,如果我硬编码,那么它的工作原理。我不明白为什么会这样?
我的代码在这里:
players_list = ['Circket', 'PSL', 'IPL', 't20', 'shahid afridi', 'aamer yamin']
length = len(players_list)
cur.execute("SELECT tweet FROM tweets_data") # Query for getting specific attribute
length = len(players_list)
for row in cur.fetchall():
i = 0
while (i<length):
#print players_list[i], 'tweet value', row
if players_list[i] in row:
print 'list item:', players_list[i]
print row
else:
print 'Else statement.'
i+=1
输出:它应该只显示与任何子字符串值匹配的行,如:
子串:板球
行:安全官员担心板球团队以激进分子的名字命名
答案 0 :(得分:1)
您似乎有Circket
的拼写错误。此外,不需要使用索引 - 只需直接循环players_list
,确保播放器和行都具有可预测的大小写。类似的东西:
players_list=['Cricket','PSL','IPL','t20','shahid afridi','aamer yamin']
cur.execute("SELECT tweet FROM tweets_data") # Query for getting specific attribute
for row in cur.fetchall():
for player in players_list:
if player.lower() in row.lower():
print 'list item:', player
print row
else:
print 'Else statement.'
答案 1 :(得分:-1)
如果我理解你的问题,你可以试试这个:
players_list = ['Cricket', 'PSL', 'IPL', 't20', 'shahid afridi', 'aamer yamin']
cur.execute("SELECT tweet FROM tweets_data")
for row in cur.fetchall():
if any(True for p in players_list if p.lower() in row.lower()):
print(row)
else:
print ("Else statement")