首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩大清单

扩大清单
EN

Stack Overflow用户
提问于 2015-08-03 19:47:50
回答 4查看 700关注 0票数 0

我正在寻找一种优化当前代码的方法:

代码语言:javascript
复制
        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

我还在一个特定的案例中使用了这一点:

代码语言:javascript
复制
        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

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

下面是列表中可能包含的内容的示例:

代码语言:javascript
复制
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代码的实例,但是我无法让这个语法与我提供的代码片段一起工作。

这段代码目前正在以我实现它的方式工作,我只是在寻找一种方法来缩短/优化它,因为我的程序已经开始变得相当大,并且能够缩短它也会帮助我缩短程序的其他部分。

提前感谢!

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-04 14:40:54

我希望这能帮到你,

代码语言:javascript
复制
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 != '' ]

最好的

票数 1
EN

Stack Overflow用户

发布于 2015-08-03 19:56:55

您可以通过递归巧妙地完成这一任务:

代码语言:javascript
复制
def worksheet_writer(results):
        if isinstance(results, list):
                for item in results: worksheet_writer(item)
        else:
                worksheet.write(r, c, results)
                c += 1

编辑以支持字符串。

票数 1
EN

Stack Overflow用户

发布于 2015-08-03 20:37:57

好的,这是我到目前为止找到的解决办法。这是一个有点混乱的列表理解。我会试着把它清理一下。

代码语言:javascript
复制
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

这提供了以下产出:

代码语言:javascript
复制
['SW_Version', 'Name', 'HD_FW', 'SerialNumber', 'HD_Model', 'HD_SerialNumber', '390', '66', 'Year', 'Model', 'Man_Yr', 'HD_Loc', 'Man_Mth']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31795568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档