输出python中的搜索列表项

时间:2017-06-16 04:18:55

标签: python python-2.7

我需要帮助,

typealias JSONDict = [String: Any]

class BaseItem: NSObject {
    class var apiName: String { return "n/a" }

    init?(json: JSONDict) {
        // I need to access dynamic type before super.init().
        // I can only access current type statically.
        print("api name before: " + BaseItem.apiName)
        // Prints "n/a", I need it to print "book".

        super.init()

        // This correctly prints "book".
        print("api name: " + type(of: self).apiName)
    }
}

class Book: BaseItem {
    override class var apiName: String { return "book" }
}

let b = Book(json: [:])

输出:

 list1 = [abc, xyz]

我正在使用以下代码:

123
143
153
abc!
abc
hhj
xyz--
xyz

以上代码不适合我的要求

注意它不应该为abc!和xyz--意思是它必须只匹配abc和xyz

3 个答案:

答案 0 :(得分:0)

虽然您的问题非常明确,但缺少 mcve 。如果您想检查拥有,如果linelist1内的内容相同,则可以使用in运算符。

if line in list1:
    print "abc or xyz present in output"

在您的情况下,它应匹配两次,一次用于abc,一次用于xyz。既然你说:

  

注意它不应该为abc!和xyz -

注意:正则表达式用于搜索字符串中的模式。不太适合你的任务。

答案 1 :(得分:0)

猜测你想搜索每个输出行是否在list1中? 看看这个你不需要正则表达式

list1 = ['abc', 'xyz']
output='''123
143
153
abc!
abc
hhj
xyz--
xyz'''

for line in output.split("\n"):
    line = line.strip()
    if line in list1:
        print line,"present in output"

输出:

  

abc出现在输出中   xyz出现在输出

答案 2 :(得分:0)

如果您仍想使用正则表达式,可以使用:

import re

output = """123
143
153
abc!
abc
hhj
xyz--
xyz"""

print(output)

for line in output.split("\n"):
    line = line.strip()
        if re.search(r"^\babc\b$", line) or re.search(r"^\bxyz\b$", line):
        print('line matched: {}'.format(line))

但是,我会创建一个单独的字典并在那里查找匹配项:

keywords = {'abc' : 0, 'xyz' :0, ...}

for line in output.split("\n"):
    if line in keywords:
        print('line matched: {}'.format(line))

如果你有很多关键词并且它们都是唯一的并且你的output文件包含很多行,那么词典是有意义的。查找时间将是常量O(1)。

如果使用关键字列表,则查找将为O(n),这使得算法总计为O(n ^ 2)。