繁体   English   中英

将嵌套的字符串列表转换为字符串列表

[英]Convert nested list of strings to list of string

我有一个双重嵌套字符串列表,我需要将其转换为嵌套字符串列表。 我在网上找到了一些帮助,但有些单词丢失了或者列表被排序了。

new_list = [[['SOCCER'],['-'],['JAPAN'],['GET'],['LUCKY'],['WIN'],[','],['CHINA'],['IN'],
  ['SURPRISE'],['DEFEAT'],['.']]]
### Expected Result [['SOCCER', '-', 'JAPAN', 'GET', 'LUCKY', 'WIN', ',', 'CHINA', 'IN', 'SURPRISE', 'DEFEAT', '.'], ...

alot = [[ele for ele in sub] for sub in new_list]
outlst = [' '.join([str(c) for c in lst]) for lst in new_list]

一种方法是使用chain.from_iterable

from itertools import chain

new_list = [[['SOCCER'],['-'],['JAPAN'],['GET'],['LUCKY'],['WIN'],[','],['CHINA'],['IN'],
  ['SURPRISE'],['DEFEAT'],['.']]]

result = [list(chain.from_iterable(e)) for e in new_list]
print(result)

Output

[['SOCCER', '-', 'JAPAN', 'GET', 'LUCKY', 'WIN', ',', 'CHINA', 'IN', 'SURPRISE', 'DEFEAT', '.']]

另一种是使用嵌套列表理解

result = [[s for lst in e for s in lst] for e in new_list]

每当我遇到嵌套或分形问题时,我都倾向于使用递归。

对于此类挑战,达到 go 的最佳方法是使用递归。

递归 function 是一个 function,它在某些时候调用自己。 要创建递归 function,您应该遵循两步规则:

  1. 创建退出条件
  2. 再次拨打function

在这里你可以有一个 function 来获取每个元素并检查该元素是否是一个列表。 如果是,它会再次调用自己并扩展到一个空列表,否则它将 append 非列表值扩展到空列表。

这样,无论深度如何,您都可以展平嵌套列表。

def flatten(data):
    ret = []
    for each in data:
        if isinstance(each, list):
            ret.extend(flatten(each))
        else:
            ret.append(each)

    return ret

注意:Python 中的递归不是您想要的,因为 Python 并不擅长它。 请参阅: Thomas Wouters 的回答

暂无
暂无

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

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