我正在寻找一种优化当前代码的方法:
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代码的实例,但是我无法让这个语法与我提供的代码片段一起工作。
这段代码目前正在以我实现它的方式工作,我只是在寻找一种方法来缩短/优化它,因为我的程序已经开始变得相当大,并且能够缩短它也会帮助我缩短程序的其他部分。
提前感谢!
编辑:在这两种情况下,输出的顺序都很重要,我希望它按照当前的顺序输出(在一个场景中仅减去'' )。
发布于 2015-08-04 14:40:54
我希望这能帮到你,
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 != '' ]最好的
发布于 2015-08-03 19:56:55
您可以通过递归巧妙地完成这一任务:
def worksheet_writer(results):
if isinstance(results, list):
for item in results: worksheet_writer(item)
else:
worksheet.write(r, c, results)
c += 1编辑以支持字符串。
发布于 2015-08-03 20:37:57
好的,这是我到目前为止找到的解决办法。这是一个有点混乱的列表理解。我会试着把它清理一下。
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']https://stackoverflow.com/questions/31795568
复制相似问题