我正在尝试编码并打印列表中的所有关键字。我的意思是:我有一个列表keywords=['bike','car','home']
我有一个文本文件:
every one has bike and car
i have a bike
i am trying to get a car and home
编码:
keywords=['bike','car','home']
with open('qwe.txt','r') as file:
for line in file:
for key in keywords:
if key in line:
a = key
break
else:
a = 'nil'
print a
我的输出只打印一个键而不是列表中的所有键都存在! 我的意思是我的输出预期是:
bike car
bike
car home
相反,我现在得到:
bike
bike
car
如何打印线上的所有按键?请帮忙!答案将不胜感激!
答案 0 :(得分:1)
这里有两个不同的问题,这两个问题都需要修复。
首先,正如@jonrsharpe指出的那样,只要你找到第一场比赛,就会break
,这意味着你特意告诉Python在第一场比赛后停止,所以它正在按照你的要求行事。只需删除break
。
其次,正如@hasan指出的那样,即使没有break
,对于每个密钥,您也可以使用新密钥或a
替换nil
。因此,您每次都要打印出home
或nil
。你想要做的是积累所有匹配的键。像这样:
matches = []
for key in keywords:
if key in line:
matches.append(key)
if matches:
print ' '.join(matches)
else:
print 'nil'
来自你的评论:
小问题,如果我有“汽车和自行车”的新行,那么它的第一个印刷'自行车'而不是'自行车'!
考虑一下你要求Python做什么:你正在浏览keywords
中的密钥,并检查每个密钥是否都在line
中找到。当然,找到它们的顺序将是它们在keywords
中出现的顺序。
如果您希望它们按照它们出现在行中的顺序,则有两种选择。
首先,您可以搜索line
,在[{1}}中搜索匹配,而不是搜索keywords
,在keywords
中搜索匹配项。如果您只想匹配完整的单词,并希望重复显示多次,这很简单:
line
如果你想匹配部分单词(例如,你现有的代码在for word in line.split():
if word in keywords:
matches.append(word)
找到car
,但我刚给出的代码不会),你可以搜索所有子串而不是所有单词:< / p>
"this program is designed for scaring small children"
如果您只想查找每个单词一次,可以在添加之前检查for i in range(len(line)):
for key in keywords:
if line[i:].startswith(key):
matches.append(key)
。
等等。无论你想添加什么,你必须先考虑规则是什么,然后才能把它变成代码,但通常不会很难。
答案 1 :(得分:1)
如果您不介意订单,可以将keywords
设为一组并使用line
中的一组字词搜索交叉点:
keywords = set(['bike','car','home'])
with open('qwe.txt', 'r') as file:
for line in file:
print ' '.join(keywords & set(line.split())) or 'nil'
当您的行和keywords
很大时,这会更快,因为您不必遍历列表。
输入
every one has bike and car
i have a bike
i am trying to get a car and home
i don't have any
输出
car bike
bike
car home
nil
答案 2 :(得分:1)
您每次都要分配一个新关键字,而不是存储您看到的每个关键字。也许每次看到一个新行时都会创建一个新列表并附加你找到的单词:
keywords=['bike','car','home']
with open('qwe.txt','r') as file:
for line in file:
a = []
for key in keywords:
if key in line:
a.append(key)
if len(a) > 0:
print ' '.join(a)
您可能还会看到list comprehension是否可以在一行中为您构建该数组。没有尝试过,但它可能是可能的。祝你好运!