Python 多条件重构列表理解

Python 多条件重构列表理解,python,list-comprehension,Python,List Comprehension,此函数的作用是运行命令行命令,获取标准输出,并将其分配给变量输出。它使用.splitlines()函数拆分为行 在输出\u行中,它检查每行(以字节为单位)是否包含单词R0915..等,如果行的长度超过3,则最后将其转换为字符串 然而,这是相当缓慢的,我觉得有一种方法可以写得更整洁、更有效 有什么帮助吗?这里有一个更有效的脚本: def detect_long_method(directory): path, dirs, files = next(os.walk(directory))

此函数的作用是运行命令行命令,获取标准输出,并将其分配给变量
输出
。它使用
.splitlines()
函数拆分为行

输出\u行
中,它检查每行(以字节为单位)是否包含单词
R0915..等
,如果行的长度超过3,则最后将其转换为字符串

然而,这是相当缓慢的,我觉得有一种方法可以写得更整洁、更有效


有什么帮助吗?

这里有一个更有效的脚本:

def detect_long_method(directory):
    path, dirs, files = next(os.walk(directory))
    output = lm.output_long_methods(directory)
    # print (output.stdout)
    split_lines = output.splitlines()
    output_lines = [output.decode('utf-8') for output in split_lines if len(output) > 3 and\
                    ('R0915' in output.decode('utf-8') or 'R0913' in output.decode('utf-8') or 'R0912' in output.decode('utf-8') or \
                    'R0904' in output.decode('utf-8') or 'R0902' in output.decode('utf-8'))]

    return output_lines

正如juanpa.arrivillaga所建议的,使用和调用
decode('utf-8')
一次应该会导致更快的执行时间。

对于初学者,不要每次检查输出中是否包含字符串时都调用
output.decode('utf-8')
。我必须在检查是否包含每个字符串时将其转换为字符串。但是你只需要做一次,而不是潜在的,像7次。而且,使用正则表达式来检查这些事情可能比在中多次使用
更有效。我怎么能做到呢?
import os
import re

def detect_long_method(directory):
    path, dirs, files = next(os.walk(directory))
    output = lm.output_long_methods(directory).decode('utf-8')
    # print (output.stdout)
    split_lines = output.splitlines()
    output_lines = [output for output in split_lines if len(output) > 3 and\
                    re.search("(R0915|R0913|R0912|R0904|R0902)", output) is not None]
    return output_lines