Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/75: Рейтинг темы: голосов - 75, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 2

Как из списка удалить пустые списки?

30.10.2013, 00:33. Показов 15294. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
например есть такое
Python
1
ls = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '],[]]
как удалить пустые [] ?
например так

Python
1
2
3
for i,d in enumerate(ls):
    if d==[]:
        del ls[i]
не удаляет =(

Добавлено через 8 минут
а все вопрос решен ) не нашел кнопку как удалить тему
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2013, 00:33
Ответы с готовыми решениями:

Удалите пустые списки из списка строк
Доброго времени суток, столкнулся с такой задачей. Задача максимально лёгкая, но у меня возникли некоторые трудности. (Фотография задачи...

Удалить из заданного списка пустые списки
Помогите, пожалуйста, на Scheme: удалить из заданного списка пустые списки

Удалить все пустые элементы из списка списков
Дан список списков (List<List<string>>) , из него надо удалить все пустые списки. В простом строковом списке вроде можно сделать так: ...

14
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
30.10.2013, 00:59
Python
1
2
3
4
5
>>> ls = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '], []]
>>> ls = list(filter(None, ls))
>>> ls
[['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 ']]
>>>
1
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 2
30.10.2013, 01:29  [ТС]
а мне тут подсказали можно сделать так, какой из вариантов оптимальней даже и не знаю
Python
1
ls = [x for x in ls if x]
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
30.10.2013, 06:58
Цитата Сообщение от allozar Посмотреть сообщение
какой из вариантов оптимальней даже и не знаю
выбирать нужно между filter() и включением
я сравнил через timeit: на небольших списках твой немного быстрее, а на больших списках твой медленнее в два раза
(а с del вообще в десять раз медленнее твоего)

Добавлено через 3 минуты
Code
1
2
3
4
5
[guest@localhost py]$ ./timecmp.py 
[0.22660166999958165, 0.22645385499981785, 0.22690548299942748]
[0.5606995429998278, 0.5607934289992045, 0.5594335770001635]
[1.7001144109999586, 1.7018712059998506, 1.7051744469999903]
[guest@localhost py]$
мой
твой
твой с del
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 2
11.09.2016, 12:13
Доброго времени!

Вопрос сходный, но более глубокий.
Мне требуется из вложенных списков удалить строки типа ' '.
Фильтрация
Python
1
h= filter(lambda x: x !='', b)
и перебор через IF
Python
1
2
3
4
5
6
7
8
for w in b:
    for elem in w:
        if elem != '':
            b[b.index(w)][w.index(elem)]=elem            
        elif elem == '':
            w.pop(w.index(elem))
        else:
            w.remove(elem)
не помогают.

Как полностью убрать пустые элементы из строк?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.09.2016, 13:33
Могу предложить пересоздание списка.
Python
1
2
3
4
5
6
7
8
9
10
11
ls = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '],[]]
 
ls2 = []
for i in range(len(ls)):
    ls2.append([])
    for el in ls[i]:
          if el != '': ls2[i].append(el)
ls = ls2
del ls2
print(ls)
# [[], [], ['1 ', 'en'], ['2 '], ['3 ', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '], []]
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.09.2016, 13:48
WhiteSadKat, через рекурсию
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def clear(l):
    for e in l:
        if isinstance(e, list):
            clear(e)
        if isinstance(e, str) and len(e) == 0:
            l.remove(e)
 
def main():
    a = [1, "", 2, ["3", "", "4", ["5", "", "6"], "7"], "8", "", "9"]
 
    clear(a)
 
    print(a)
 
 
if __name__ == "__main__":
    main()
1
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
11.09.2016, 14:07
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import timeit
 
 
def test1():
    data = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '],
            ['5 '],
            ['6 '], ['7 '], ['8 '], []]
 
    for i, sequence in enumerate(data):
        if all(sequence):
            continue
        for j, elem in enumerate(sequence):
            if not elem:
                del data[i][j]
 
 
def test2():
    ls = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '],
          ['6 '], ['7 '], ['8 '], []]
 
    ls2 = []
    for i in range(len(ls)):
        ls2.append([])
        for el in ls[i]:
            if el != '': ls2[i].append(el)
    ls = ls2
    del ls2
 
 
def test3():
    def clear(l):
        for e in l:
            if isinstance(e, list):
                clear(e)
            if isinstance(e, str) and len(e) == 0:
                l.remove(e)
 
    data = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '],
            ['5 '],
            ['6 '], ['7 '], ['8 '], []]
    clear(data)
 
print(timeit.timeit("test1()", setup="from __main__ import test1", number=100000))
print(timeit.timeit("test2()", setup="from __main__ import test2", number=100000))
print(timeit.timeit("test3()", setup="from __main__ import test3", number=100000))
0.2915975389769301
0.39930287800962105
0.8246724310447462
2
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 2
11.09.2016, 14:26
Garry Galler, Avazart, alex925, благодарю за оперативность!
Выбрал решение от Garry Galler как быстрое и понятное для моего уровня!
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.09.2016, 14:33
WhiteSadKat,
Цитата Сообщение от WhiteSadKat Посмотреть сообщение
Выбрал решение от Garry Galler
Да только там не будет работать с тройной и выше вложенностью.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
11.09.2016, 14:35
Цитата Сообщение от Avazart Посмотреть сообщение
Да только там не будет работать с тройной и выше вложенностью.
Ну, судя по всему ему это подходит, почему не использовать. Ну, а рекурсия в Python это очень не очень выбор, даже по профилировщику это видно и я ещё молчу про жор памяти и исчерпание глубины рекурсии.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.09.2016, 14:36
Цитата Сообщение от alex925 Посмотреть сообщение
Ну, а рекурсия в Python это очень не очень выбор, даже по профилировщику это видно и я ещё молчу про жор памяти и исчерпание глубины рекурсии.
Это оптимальный выбор в плане ясности.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
11.09.2016, 14:37
Цитата Сообщение от WhiteSadKat Посмотреть сообщение
как быстрое
Оно не самое быстрое вообще-то, если ты не заметил + там не нужная перетасовка список зачем-то....

Цитата Сообщение от Avazart Посмотреть сообщение
Это оптимальный выбор в плане ясности.
Спорный момент, очень спорный.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.09.2016, 14:39
Цитата Сообщение от alex925 Посмотреть сообщение
и исчерпание глубины рекурсии.
Ну я не думаю что там будет такое, вложенность вряд ли то будет большая вложенность.
Кроме того тут все по ссылкам так что и по памяти не большие затраты.

Цитата Сообщение от alex925 Посмотреть сообщение
Спорный момент, очень спорный.
Ну попробуйте соорудить аналогичный код без рекурсии и станет очевидно.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.09.2016, 17:18
Цитата Сообщение от alex925 Посмотреть сообщение
+ там не нужная перетасовка список зачем-то.
Согласен. Использование enumerate (пока не успел привыкнуть к нему) + прямое удаление в данном случае получается более эффективным и логичным, чем пересоздание.

Но есть один нюанс мне не совсем ясный.
Функция all(seq) проверяет все ли элементы последовательности True, но логично ли что она возвращает True даже на пустом списке? Да, я знаю, что в python пустой список в булевом контексте True. Но ведь функция судя по документации должна проверять его содержимое, а пустое содержимое как-то не вяжется с True.
Вот all([None]), не вызывает вопросов, так как возвращает ожидаемое False.

Добавлено через 21 минуту
----
Пустой список оказывается все-таки не True - это я ошибся. Ну тогда тем более непонятно зачем all([]) возвращает True.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2016, 17:18
Помогаю со студенческими работами здесь

Удалить из списка все элементы, содержащие пустые строки файла
в двунаправленном списке записаны данные текстового файла . удалить из списка все элементы , содержащие пустые строки файла

Удалить из списка списки
Удалить из списка списки при помощи макроса, если можно то код

Удалить из списка одноуровневые списки
Вот задача. Напишите функцию (f L), которая выдает список, получающийся после удаления из списка L всех элементов, представляющих собой...

Удалить из списка списки размерностью 2
Удалить из списка списки размерностью 2 (DrScheme)

Как правильно создавать пустые списки?
Доброго времени суток. Создаю пустой список matrix = Потом пытаюсь заполнить его разными элементами (целыми числами), но ничего не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru