2011-11-15 121 views
1

我有一個6元素列表的列表。如果嵌套表的兩個特別的「列」不匹配,我想遞歸「移動」的前3個元素到下一個列表頂部的列表的長度。所以:如何在Python中遞歸地將列表元素「向下」移動到另一個列表的相應元素?

list1 = [ 
    ['4', 'and', '3', '4', 'EOS', '15'], 
    ['4', 'what', '3', '0', 'and', '2'], 
    ['4', 'is', '2', '1', 'what', '3'], 
    ['4', 'the', '2', '1', 'is', '5'] 
] 

list2 = [ 
    ['0', 'EOS', '0', '4', 'EOS', '15'], 
    ['4', 'and', '3', '0', 'and', '2'], 
    ['4', 'what', '3', '1', 'what', '3'], 
    ['4', 'is', '2', '1', 'is', '5'] 
] 

其中最後一個列表的最後3個元素不添加新列表。

我確定有一些內置的方式來做到這一點,但我找不到它。謝謝!

+2

如果我們可以縮小一個級別,我們可以更好地回答。例如,我想知道爲什麼你不能把原來的六個列表分成兩個三個列表。這種轉變會使你想要一件小事(只需在第一個列表前面加上一個三元組列表,然後再從列表中刪除最後一個列表列表)。 –

+1

如果我們可以放大*少數*級別,也許整個練習是沒有意義的。我的意思是,你真的**想做什麼?我無法理解它。 –

+0

我有兩種不同的分析方法,用於對按文字分解的文本進行兩種不同的語法分析。分析以不同的方式分解句子,例如,在另一個句子中不加入句子的句子(EOS)。這兩個分析需要對齊,以便我可以對它們運行統計。所以,我把它們放在一張桌子上,我正在比較欄目。大多數情況下,它們都是關閉的:因此,我檢查文本列是否不匹配,然後在一個(或其他)中插入一個EOS,然後將所有內容都推下來並繼續比較。我一直在Pythoning 2周,所以...要溫柔! :) – SarahVW

回答

0

我不知道內置的,肯定不是非常Python的,但這個工程(到位修改):

list1 = [ 
    ['4', 'and', '3', '4', 'EOS', '15'], 
    ['4', 'what', '3', '0', 'and', '2'], 
    ['4', 'is', '2', '1', 'what', '3'], 
    ['4', 'the', '2', '1', 'is', '5'] 
] 
prev = ['0','EOS','0'] 
for i in list1: 
    tmp = i[0:3] 
    i[0:3] = prev 
    prev = tmp 

print list1 

好一點,但還是醜(創建一個新的列表):

list1 = [ 
    ['4', 'and', '3', '4', 'EOS', '15'], 
    ['4', 'what', '3', '0', 'and', '2'], 
    ['4', 'is', '2', '1', 'what', '3'], 
    ['4', 'the', '2', '1', 'is', '5'] 
] 

prev = ['0','EOS','0'] 
y = [prev + [0,0,0]] + list1 
list2 = [y[i][0:3] + list1[i][3:] for i in range(0, len(list1))] 

在前面加上新數據修改舊列表,還創建了一個新的列表:

list1 = [ 
    ['4', 'and', '3', '4', 'EOS', '15'], 
    ['4', 'what', '3', '0', 'and', '2'], 
    ['4', 'is', '2', '1', 'what', '3'], 
    ['4', 'the', '2', '1', 'is', '5'] 
] 

list1 = [['0','EOS','0']] + list1 
print [list1[i-1][0:3] + list1[i][3:] for i in range(1, len(list1))] 

這可能是最好的。利用序列[-1]的行爲,創建一個新列表:

list1 = [ 
    ['4', 'and', '3', '4', 'EOS', '15'], 
    ['4', 'what', '3', '0', 'and', '2'], 
    ['4', 'is', '2', '1', 'what', '3'], 
    ['4', 'the', '2', '1', 'is', '5'] 
] 

# Put the new data on the end of the list 
list1[-1][0:3] = ['0','EOS','0'] 
# note how i=0 -1 references the *last* element of the list 
print [list1[i-1][0:3] + list1[i][3:] for i in range(0, len(list1))] 
相關問題