2011-10-22 51 views
1

Python 2.4.xPython - 條件分割線

我有一系列我正在閱讀的行 - 重新排列,然後將每行插入另一個列表中嵌套的列表。

我有以下幾點。

testposition = (22, 3, 1, 2, 18, 19, 5, 6, 8, 9, 12, 23, 24, 25, 26, 27, 28) 

def giveme(s, words=()): 
    lista = s.split() 
    return [lista[item-1] for item in words] 

for rec in testline: 
    testlist.append(giveme(rec, testposition)) 

換句話說 - 如果rec被傳遞是。

Lorem ipsum dolor sit amet consectetur adipiscing elit In vitae neque nec magna tristique ornare Cras faucibus risus eu odio pharetra interdum Nunc dui mi rhoncus ut aliquet 

那麼這條線的列表將是。 (重新排列後)。 (這個列表將被附加到另一個列表 - 嵌套列表)。

它的表現非常好。然而,我想要做的就是把最後6個並且像這樣組合在一起。

['interdum', 'dolar', 'Lorem', 'ipsum', 'risus', 'eu', 'amet', 'consectetur', 'elit', 'In', 'nec', 'Nunc dui mi rhoncus ut aliquet'] 

,如果一行被傳遞沒有28元,但只有25說 - 比它只是集團任何超出22元 - (文本不是行之後的同一行)。

即上面的例子中有28個元素,這其中有25

Lorem存有悲坐阿梅德consectetur adipiscing ELIT在預期值,也履歷NEC蚤tristique ornare CRAS faucibus risus EU奧迪奧pharetra interdum Nunc公司DUI MI

和結果列表將是:

['interdum', 'dolar', 'Lorem', 'ipsum', 'risus', 'eu', 'amet', 'consectetur', 'elit', 'In', 'nec', 'Nunc dui mi'] 

希望這是明確的 - 任何想法?

謝謝。

+0

是你這表明在換位矩陣結束連續運行的唯一途徑? –

回答

3

如果您向str.split提供可選的第二個參數,則可以控制執行多少次拆分:

testposition = (22, 3, 1, 2, 18, 19, 5, 6, 8, 9, 12, 23) 

def giveme(s, words=()): 
    lista = s.split(' ',22) 
    result=[lista[item-1] for item in words] 
    return result 

rec='Lorem ipsum dolor sit amet consectetur adipiscing elit In vitae neque nec magna tristique ornare Cras faucibus risus eu odio pharetra interdum Nunc dui mi rhoncus ut aliquet' 
print(giveme(rec, testposition)[-1]) 

產量

'Nunc dui mi rhoncus ut aliquet' 

rec='Lorem ipsum dolor sit amet consectetur adipiscing elit In vitae neque nec magna tristique ornare Cras faucibus risus eu odio pharetra interdum Nunc dui mi' 
print(giveme(rec, testposition)[-1]) 

產生

'Nunc dui mi' 
+0

工作很好 - 非常感謝。 – Chasester

0

假設你只需要重新排列第22個字的任何行: 您可以使用序列切片只選擇要重新排列的部分:

testposition = (22, 3, 1, 2, 18, 19, 5, 6, 8, 9, 12) 

def giveme(s, words=()): 
    lista = s.split() 
    maxpos = max(testposition) 
    return [lista[item-1] for item in words[:maxpos]] + words[maxpos:] 

for rec in testline: 
    testlist.append(giveme(rec, testposition))