Python - 有条件分割线

时间:2011-10-22 19:42:00

标签: python

Python 2.4.x

我正在阅读一系列行 - 重新排列然后将每行放入一个嵌套在另一个列表中的列表。

我有以下内容。

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

然后这行的列表就是。 (重新排列后)。 (此列表将附加到另一个列表 - 嵌套列表)。

['interdum', 'dolar', 'Lorem', 'ipsum', 'risus', 'eu', 'amet', 'consectetur', 'elit', 'In', 'nec', '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 ipsum dolor sit amet consectetur adipiscing elit In vitae neque nec magna tristique ornare Cras faucibus risus eu odio pharetra interdum Nunc dui mi

,结果列表为:

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

希望明白 - 任何想法?

谢谢。

3 个答案:

答案 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'

答案 1 :(得分:0)

使用array slices

lista[:11] + [' '.join(lista[11:])]

答案 2 :(得分: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))