python打印一行中的所有单词

时间:2014-08-10 11:37:17

标签: python list

我正在尝试编码并打印列表中的所有关键字。我的意思是:我有一个列表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

如何打印线上的所有按键?请帮忙!答案将不胜感激!

3 个答案:

答案 0 :(得分:1)

这里有两个不同的问题,这两个问题都需要修复。

首先,正如@jonrsharpe指出的那样,只要你找到第一场比赛,就会break,这意味着你特意告诉Python在第一场比赛后停止,所以它正在按照你的要求行事。只需删除break

其次,正如@hasan指出的那样,即使没有break,对于每个密钥,您也可以使用新密钥或a替换nil。因此,您每次都要打印出homenil。你想要做的是积累所有匹配的键。像这样:

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是否可以在一行中为您构建该数组。没有尝试过,但它可能是可能的。祝你好运!