0

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

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]
4

2 回答 2

4

一种方法是使用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)

输出

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

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

result = [[s for lst in e for s in lst] for e in new_list]
于 2021-10-05T12:22:03.043 回答
0

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

对于这类挑战,最好的方法是使用递归。

递归函数是在某些点调用自身的函数。要创建递归函数,您应该遵循 2 步规则:

  1. 创建退出条件
  2. 再次调用该函数

在这里你可以有一个函数来获取每个元素并检查元素是否是一个列表。如果是,它将再次调用自身并扩展到一个空列表,否则它将非列表值附加到空列表中。

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

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 的回答

于 2021-10-05T12:32:06.137 回答