扩展列表列表

Expanding list of lists

我正在寻找一种方法来优化我现有的代码:

        for result in results:
            if result != '':
                if isinstance(result, list):
                    for subresult in result:
                        if subresult != '':
                            worksheet.write(r, c, subresult)
                            c += 1
                else:
                    worksheet.write(r, c, result)
                    c += 1

我在特定情况下也使用这个:

        for result in results:
            if isinstance(result, list):
                for subresult in result:
                    worksheet.write(r, c, subresult)
                    c += 1
            else:
                worksheet.write(r, c, result)
                c += 1

我有一个列表,在某些情况下只包含一个值,而在其他情况下它包含多个值(即另一个列表)。

这是列表可能包含的内容的示例:

results = ['', '', '', '390', '66', ['Name', 'SerialNumber', 'Model', 'Year'], 'SW_Version', ['HD_Loc', 'HD_Model', 'HD_FW', 'HD_SerialNumber', 'Man_Yr', 'Man_Mth'], '', '', '']

最终我希望能够将每个值输出到 excel 中它自己的列。在某些情况下,我只想输出列表中包含值的部分,这是由我提供的第一段代码执行的。在其他情况下,我想输出列表的所有部分,不管它是否有值,这是由我提供的第二段代码执行的。

我见过 for 循环和一些动作语句,比方说 print,被组合成一行 python 代码的实例,但我一直无法使该语法与我提供的片段一起使用。

这段代码目前按照我实现它的方式工作,我只是在寻找一种方法 shorten/optimize 它因为我拥有它的程序开始变得相当大并且能够缩短这将有助于我缩短程序的其他部分。

提前致谢!

编辑: 在这两种情况下,它的输出顺序都很重要,我希望它按照当前的顺序输出(只是减去'' 在一种情况下)。

你可以用递归巧妙地做到这一点:

def worksheet_writer(results):
        if isinstance(results, list):
                for item in results: worksheet_writer(item)
        else:
                worksheet.write(r, c, results)
                c += 1

编辑以支持字符串。

好的,这是我目前得到的解决方案。这是一个有点混乱的列表理解。我会尝试清理一下。

results = ['', '', '', '390', '66', ['Name', 'SerialNumber', 'Model', 'Year'], 'SW_Version', ['HD_Loc', 'HD_Model', 'HD_FW', 'HD_SerialNumber', 'Man_Yr', 'Man_Mth'], '', '', '']
li = list(set([item if type(sublist) is list else sublist for sublist in results for item in sublist]))
print li

这给出了输出:

['SW_Version', 'Name', 'HD_FW', 'SerialNumber', 'HD_Model', 'HD_SerialNumber', '390', '66', 'Year', 'Model', 'Man_Yr', 'HD_Loc', 'Man_Mth']

希望对您有所帮助,

results = ['', '', '', '390', '66', ['Name', 'SerialNumber', 'Model', 'Year'], 'SW_Version', ['HD_Loc', 'HD_Model', 'HD_FW', 'HD_SerialNumber', 'Man_Yr', 'Man_Mth'], '', '', '']

flatList = [item for sublist in [[item] if not isinstance(item,list) else item for item in results] for item in sublist]

flatListWithoutBlanks = [item for item in [item for sublist in [[item] if not isinstance(item,list) else item for item in results] for item in sublist] if item != '' ]

最佳,

我在评论中发布了它,但不确定是否会清楚,

flatListWithoutBlanks = [item for item in [item for sublist in [[item] if not isinstance(item,list) else item for item in results] for item in sublist] if item != '' ]