Pythonic способ и экономия времени для удаления пустого вложенного списка элементов

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

Пример:

tag = [['A', 'B', 'C', ''], ['D', 'F', 'G', '', '',''], ['H','I','J'],['L','M','','','','']]

Я нахожу разные подходы, такие как:

list(filter(None, tag))

or

for i in tag:
    test_list = [i for i in tag if i]

or

'' in [j for i in tag for j in i]

Ни в коем случае, я не могу удалить пустой элемент, во-первых, а во-вторых, время для его достижения слишком медленное. Также я попытался разработать несколько вложенных списков в python tutor, но ничего не удалял.

Предложение пожалуйста? благодарю вас


person MarcusRB    schedule 22.03.2020    source источник
comment
Пожалуйста, опубликуйте минимально воспроизводимый пример.   -  person buran    schedule 22.03.2020
comment
Бьюсь об заклад, об этом уже спрашивали миллион раз => бинго   -  person Jean-François Fabre    schedule 22.03.2020
comment
Да конечно, миллион раз, но не производительность. В любом случае, благодарю Вас!   -  person MarcusRB    schedule 22.03.2020


Ответы (2)


Я не знаю, удовлетворит ли производительность, но

tags = [['A', 'B', 'C', ''], ['D', 'F', 'G', '', '',''],
        ['H','I','J'],['L','M','','','','']]
filtered_tags = [[tag for tag in item if tag] for item in tags]
print(filtered_tags)

выход

[['A', 'B', 'C'], ['D', 'F', 'G'], ['H', 'I', 'J'], ['L', 'M']]
person buran    schedule 22.03.2020

Вы можете использовать filter с пониманием списка.

[list(filter(None,l)) for l in tag]
# [['A', 'B', 'C'], ['D', 'F', 'G'], ['H', 'I', 'J'], ['L', 'M']]

Or

[[i for i in l if i] for l in tag]
# [['A', 'B', 'C'], ['D', 'F', 'G'], ['H', 'I', 'J'], ['L', 'M']]

Некоторый анализ timeit с использованием Python 3.7 для Windows 10.

#Using list of size 100_000 i.e len(tag)=100_000 for benchmarking
In [12]: timeit [list(filter(None,l)) for l in tag]
42.1 ms ± 1.38 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [13]: timeit [[i for i in l if i] for l in tag]
34.7 ms ± 733 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
person Ch3steR    schedule 22.03.2020