将字符串分成两个单词的列表,重复最后一个单词

时间:2018-08-03 08:26:57

标签: python string list split

我需要将字符串拆分为每两个单词的列表,但要重复每对单词的最后一个单词。 这是我通过使用在其他问题中发现的示例而尝试的方法:

line = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."""

def split_line(in_line):
    line_sp = line.split(" ")
    line_two = [" ".join(line_sp[i:i + 2]) for i in range(0, len(line_sp), 2)]
    return line_two

print(split_line(line))

结果变为:

['Lorem ipsum', 'dolor sit', 'amet, consectetur', 'adipiscing elit,', 'sed do', 'eiusmod tempor', 'incididunt ut', 'labore et', 'dolore magna', 'aliqua.']

但是我真正需要的是这个

['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet', 'amet, consectetur', 'consectetur adipiscing', ...]

我如何使其起作用? 谢谢!

7 个答案:

答案 0 :(得分:10)

您可以在以下两段单词上使用display: initial

zip

这将输出:

words = line.split()
print(list(map(' '.join, zip(words[:-1], words[1:]))))

答案 1 :(得分:4)

简单的循环

l = line.split(' ')
result = []
for i in range(len(l) - 1):
    result.append(l[i] + ' ' + l[i+1])
print(result) 
# ['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet,', 'amet, consectetur', 'consectetur adipiscing', 'adipiscing elit,', 'elit, sed', 'sed do', 'do eiusmod', 'eiusmod tempor', 'tempor incididunt', 'incididunt ut', 'ut labore', 'labore et', 'et dolore', 'dolore magna', 'magna aliqua.', 'Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet,', 'amet, consectetur', 'consectetur adipiscing', 'adipiscing elit,', 'elit, sed', 'sed do', 'do eiusmod', 'eiusmod tempor', 'tempor incididunt', 'incididunt ut', 'ut labore', 'labore et', 'et dolore', 'dolore magna', 'magna aliqua.']

答案 2 :(得分:3)

您正在寻找的是nltk.bigrams()

import nltk
bigrm = list(nltk.bigrams(line.split()))

答案 3 :(得分:2)

您可以从构建line

中的单词列表开始
words = line.split()

然后您可以列出包含切片的结果对的列表

pairs = [words[i:i + 2] for i in range(len(words))]

最后,您可以将每一对与' '结合起来

result = [" ".join(pair) for pair in pairs if len(pair) > 1]

答案 4 :(得分:1)

您可以尝试类似的方法,我不知道python中的语法,因此可以在java中进行回答。 可能是您可以将其转换为python

String line = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
    String[] split = line.split(" ");
    String [] line_two = new String[split.length-1];

    for (int i = 1; i < split.length; i++) {
        line_two[i-1] =split[i-1] +" "+split[i];
    }

答案 5 :(得分:1)

您可以将惰性生成器与zip一起使用:

def split_line(in_line):
    line_sp = line.split()
    yield from map(' '.join, zip(line_sp, line_sp[1:]))

print(list(split_line(line)))

['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet,',
 ...
 'labore et', 'et dolore', 'dolore magna', 'magna aliqua.']

答案 6 :(得分:1)

您也可以使用正则表达式进行尝试:

rslt=[ " ".join(tup) for tup in re.findall(r"(\w+)\W+(?=(\w+))",line) ]

\ w +一个或多个文字字符;

(\ w +)我们捕获匹配的模式;

\ W +一个或多个非单词字符;

(?=(\ w +))向前看为(?= ...),但不要向前走,但要抓住下一个单词。