繁体   English   中英

在 Python 的字符串列表中递归合并连续元素

[英]Merging consecutive elements recursively in a list of strings in Python

我有一个字符串列表,需要将其转换为更小的字符串列表,具体取决于两个连续元素是否属于同一个短语。 目前,如果第i-th字符串的最后一个字符较低并且第i+1-th字符串的第一个字符也较低,则会发生这种情况,但将来应该检查更复杂的条件。

例如这个非常深刻的文本:

['I am a boy',
'and like to play'
'My friends also'
'like to play'
'Cats and dogs are '
'nice pets, and'
'we like to play with them'
]

应该变成:

['I am a boy and like to play', 
 'My friends also like to play',
 'Cats and dogs are nice pets, and we like to play with them'
]

我的python解决方案

我认为您发布的数据是以逗号分隔的。 如果是 pfb 一个简单的循环解决方案。

data=['I am a boy',
'and like to play',
'My friends also',
'like to play',
'Cats and dogs are ',
'nice pets, and',
'we like to play with them'
]

required_list=[]

for j,i in enumerate(data):
    print(i,j)
    if j==0:
        req=i
    else:
        if i[0].isupper():
            required_list.append(req)
            req=i
        else:
            req=req+" "+i
required_list.append(req)


print(required_list)    

既然你想递归地做,你可以尝试这样的事情:

def join_text(text, new_text):
    if not text:
        return
    if not new_text:
        new_text.append(text.pop(0))
        return join_text(text, new_text)
    phrase = text.pop(0)
    if phrase[0].islower():  # you can add more complicated logic here
        new_text[-1] += ' ' + phrase
    else:
        new_text.append(phrase)
    return join_text(text, new_text)


phrases = [
    'I am a boy',
    'and like to play',
    'My friends also',
    'like to play',
    'Cats and dogs are ',
    'nice pets, and',
    'we like to play with them'
]


joined_phrases = []
join_text(phrases, joined_phrases)
print(joined_phrases)

我的解决方案在空格方面存在一些问题,但我希望您明白了。 希望能帮助到你!

这是你的代码检查它

data = ['I am a boy',
'and like to play'
'My friends also'
'like to play'
'Cats and dogs are '
'nice pets, and'
'we like to play with them'
]

joined_string = ",".join(data).replace(',',' ')

import re
values = re.findall('[A-Z][^A-Z]*', joined_string)
print(values)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM