Преобразование списка списков / вложенных списков в список списков без вложенности - PullRequest
0 голосов
/ 05 октября 2018

Я хочу преобразовать свой список списков, и в этих списках есть список только в список списков.Например:

Мой код:

a = [[], [], [['around_the_world']], [['around_the_globe']], [], [], [], []]
aaa = len(a)
aa = [[] for i in range(aaa)]
for i, x in enumerate(a):
    if len(x) != 0:
        for xx in x:
            for xxx in xx:
                aa[i].append(xxx)
print(aa)

В настоящее время:

a = [[], [], [['around_the_world']], [['around_the_globe']], [], [], [], []]

к ожидаемому:

[[], [], ['around_the_world'], ['around_the_globe'], [], [], [], []]

Мой текущий код работает в поискеожидаемый результат.Тем не менее, я должен использовать слишком много для цикла и слишком глубоко.Есть ли более короткий способ сделать это, как в одну или две строки?

Ответы [ 5 ]

0 голосов
/ 05 октября 2018

Все краткие методы, которые выглядят разрешенными здесь, являются расширенным объяснением того, что происходит в большинстве этих процессов.В значительной степени вы unpacking вложенный список и не касаетесь пустых списков.

a = [[], [], [['around_the_world']], [['around_the_globe']], [], [], [], []]
result = []

for i in a:
    if i == []:
        result.append(i)
    else:
        result.append(*i)

print(result)
# [[], [], ['around_the_world'], ['around_the_globe'], [], [], [], []]
0 голосов
/ 05 октября 2018

Попробуйте next с iter:

a = [[], [], [['around_the_world']], [['around_the_globe']], [], [], [], []]
print([next(iter(i),[]) for i in a])

Вывод:

[[], [], ['around_the_world'], ['around_the_globe'], [], [], [], []]
0 голосов
/ 05 октября 2018

Поскольку вы хотите сгладить внутренние подсписки, вы можете использовать понимание списка в пределах понимания списка:

[[i for s in l for i in s] for l in a]

Это возвращает:

[[], [], ['around_the_world'], ['around_the_globe'], [], [], [], []]
0 голосов
/ 05 октября 2018

Я использовал для этого itertools.для получения дополнительной информации сгладить список в Python

import itertools
a=[[], [], [['around_the_world']], [['around_the_globe']], [], [], [], []]
a = [list(itertools.chain(*li)) for li in a]
print(a)

Вывод

[[], [], ['around_the_world'], ['around_the_globe'], [], [], [], []]
0 голосов
/ 05 октября 2018

Вы можете сделать это с помощью понимания списка, просто проверив, является ли вложенный список пустым или нет, и, если нет, заменив внешний список внутренним списком (по индексу).

data = [[], [], [['around_the_world']], [['around_the_globe']], [], [], [], []]

result = [d[0] if d else d for d in data]
print(result)

# OUTPUT
# [[], [], ['around_the_world'], ['around_the_globe'], [], [], [], []]
...