2015-10-15 62 views
2

我處理的是收集表格中存儲的一些信息的Word文件。最初我有這樣的:Pithonic在單個循環內添加列表的方式

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說assinging名單是不是一個「好」的方式把事情的工作。有沒有一種更優雅的方式來創建列表並同時將其附加到循環中?我沒有看到讓Python知道我正在處理項目列表的方法,並且我不知道如何在最初創建table時打包此循環。

+0

如果你使用'table = []' –

+0

,你可以避免調用'table.remove([])'謝謝!現在我更接近簡單的代碼。警告也消失了,看起來像解決了這個問題。 –

回答

1

基本上你是說用table = [[]]是「我有一個包含一個空列表清單」。

並與table.remove([])你正在刪除該空的列表。這不會真的給你的程序添加任何東西。

如果你做table = [],你可以避免撥打table.remove([])

您在for循環中追加的列表不受此影響,問題/警告也應該消失。

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 ] 
+0

這樣我得到3d列表,它將需要更多的代碼來進一步處理。至少會有兩個循環來提取我的數據。但還是謝謝。 –