Pithonic方式在单循环中追加列表

时间:2015-10-15 09:21:01

标签: python list

我处理Word文件,收集存储在表格中的一些信息。最初,我有这个:

table = [[app.ActiveDocument.Tables(1).Cell(x, y).Range.Text[:-1]
 for y in [3, 4]] for x in range(13, app.ActiveDocument.Tables(1).Rows.Count-2)]

这里我得到2d列表以进一步传递。但有时我会在一个文件中获得一组表。结构总是一样的,所以我可以使用

table += ['here's the same list as above with diffrent index in Tables']

使用新数据和return附加我的列表。

所以代码现在是:

table = [[]]
for tab in app.ActiveDocument.Tables:
    table += [[tab.Cell(x, y).Range.Text[:-1] for y in [3, 4]] for x in range(13, tab.Rows.Count-2)]
table.remove([])

但是pyCharm说,分配列表并不是让事情顺利进行的“好方法”。是否有更优雅的方法来创建列表并同时将其附加到循环中?我没有看到让Python知道我正在处理项目列表的方法,我不知道如何在table的初始创建中打包这个循环。

2 个答案:

答案 0 :(得分:1)

基本上你用table = [[]]说的是"我有一个包含空列表的列表"。

使用table.remove([])删除该空列表。这并没有真正为你的程序添加任何内容。

如果您执行table.remove([]),则可以避免致电table = []

您在for循环中追加的列表不受此影响,问题/警告也应该消失。

答案 1 :(得分:0)

你可以使用列表理解,但看起来有点乱 -

table = [[[tab.Cell(x, y).Range.Text[:-1] for y in [3, 4]]
           for x in range(13, tab.Rows.Count-2) ]
           for tab in app.ActiveDocument.Tables ]