【问题标题】:How to split a string of multiple words into a list with strings of a certain number of words?如何将一个包含多个单词的字符串拆分成一个包含一定数量单词的字符串的列表?
【发布时间】:2021-02-11 23:48:12
【问题描述】:

我有一个包含多种语言字符的字符串:

'죄송합니다 how are you doing? My name is Yudhiesh and I am 아니 doing good 저기요'

我正在尝试根据字符串中的单词数将此单个字符串分块为字符串列表,如果块大小为7,即字符串中最多有 7 个单词,结果应该是这样的:

['죄송합니다 how are you doing? My name', 'is Yudhiesh and I am 아니 doing', 'good 저기요']

我目前的尝试是基于你如何分块一个不起作用的列表:

s = '죄송합니다 how are you doing? My name is Yudhiesh and I am 아니 doing good 저기요'
>>> parts = [str(s[i:i+7]) for i in range(0, len(s), 7)]
>>> parts
['죄송합니다 h', 'ow are ', 'you doi', 'ng? My ', 'name is', ' Yudhie', 'sh and ', 'I am 아니', ' doing ', 'good 저기', '요']

【问题讨论】:

标签: python


【解决方案1】:

首先,您可以创建一个单词列表,然后创建块并加入它们。

这是你需要的函数:

def split_max_num(string, max_words):
    """
    >>> split_max_num('죄송합니다 how are you doing? My name is Yudhiesh and I am 아니 doing good 저기요', 7)
    ['죄송합니다 how are you doing? My name', 'is Yudhiesh and I am 아니 doing', 'good 저기요']
    """
    words = string.split()
    len_words = len(words)

    res = list()
    for index in range(0, len_words, max_words):
        res.append(' '.join(words[index:index+max_words]))
    return res

【讨论】:

  • 感谢这对我的其他测试用例也有效。
【解决方案2】:

下面的呢?

def split_max(words, n): 
    words = words.split()
    words = [words[i:i + n] for i in range(0, len(words), n)]
    return [' '.join(l) for l in words]


split_max(data, 7)

【讨论】:

    【解决方案3】:

    你确定你没有设置s=['죄송합니다 how are you doing? My name', 'is 도와 주세요 and I am doing', 'good 저기요'] 在此示例中生成 parts 之前?

    您可能希望使用"somestring".split(" ") 拆分原始字符串,即拆分空格以获取所有单词的列表,然后您可以像尝试那样使用索引来切分列表。

    【讨论】:

    • 你尝试过:` somestring = "yoursentence" wordlist = somestring.split(" ") Sevens = [wordlist[i:i+7].join() for i in range(0, len(wordlist), 7)] ` 它不起作用?
    【解决方案4】:

    在字符串上使用.split() 并将其分块:

    from typing import List
    
    def chunk_list(lst: List[str], chunk_size: int) -> List[List[str]]: 
        return [
            lst[i:i + chunk_size] 
            for i in range(0, len(lst), chunk_size)
        ]
         
    
    def chunk_string(string: str, chunk_size: int) -> List[str]:
        return chunk_list(string.split(), chunk_size)
    

    【讨论】:

    • 感谢您的回答,但它会产生[['죄송합니다', 'how', 'are', 'you', 'doing?', 'My', 'name'], ['is', 'Yudhiesh', 'and', 'I', 'am', '아니', 'doing'], ['good', '저기요']]
    【解决方案5】:

    您正在将列表转换为列表的字符串表示形式。

    我认为你的意思是重新加入这些词

    s = '죄송합니다 how are you doing? My name is Yudhiesh and I am 아니 doing good 저기요'
    s = s.split()
    print([" ".join(s[i:i+7]) for i in range(0, len(s), 7)]) 
    

    【讨论】:

    • 您好,感谢您的回答,但这会产生['죄 송 합 니 다 h', 'o w a r e ', 'y o u d o i', 'n g m y n', 'a m e i s ', 'Y u d h i e s', 'h a n d I', ' a m 아 니 ', 'd o i n g g', 'o o d 저 기 요']
    • 什么是s?字符串,还是单词列表?
    • 是整个字符串
    • 好的,那么您仍然需要将其拆分为 s[i:i+7] 以获取单词而不是字符
    猜你喜欢
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2020-10-23
    • 2022-07-06
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多