Разделение списков по пустому элементу - PullRequest
0 голосов
/ 23 октября 2018

У меня есть один список, который может содержать любое количество элементов.

['jeff','ham','boat','','my','name','hello']

Как разделить этот список на два списка или любое количество списков в зависимости от пустых строковых элементов?

Все эти списки можно затем поместить в один список списков.

Ответы [ 5 ]

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

Я не уверен, что это то, что вы пытаетесь сделать, но попробуйте:

my_list = ['jeff','ham','boat','','my','name','','hello']
list_tmp = list(my_list)
final_list = []
while '' in list_tmp:
    idx = list_tmp.index('')
    final_list.append(list_tmp[:idx])
    list_tmp = list_tmp[idx + 1:]
0 голосов
/ 23 октября 2018

Если вы уверены, что в списке есть только одна пустая строка, вы можете использовать str.index, чтобы найти индекс пустой строки, а затем нарезать список соответствующим образом:

index = lst.index('')
[lst[:index], lst[index + 1:]]

Еслив списке может быть более одной пустой строки, вы можете использовать itertools.groupby, например:

lst = ['jeff','ham','boat','','my','name','hello','','hello','world']
from itertools import groupby
print([list(g) for k, g in groupby(lst, key=bool) if k])

. Вывод:

[['jeff', 'ham', 'boat'], ['my', 'name', 'hello'], ['hello', 'world']]
0 голосов
/ 23 октября 2018

Используя itertools.groupby, вы можете сделать:

from itertools import groupby

lst = ['jeff','ham','boat','','my','name','hello']

[list(g) for k, g in groupby(lst, key=bool) if k]
# [['jeff', 'ham', 'boat'], ['my', 'name', 'hello']]

Использование bool в качестве ключевой функции группировки использует тот факт, что пустая строка является единственной невернойстрока.

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

Пусть list_string будет вашим списком.Это должно сработать:

list_of_list=[[]]
for i in list_string:
    if len(i)>0:
        list_of_list[-1].append(i)
    else:
        list_of_list.append([])

По сути, вы создаете список списка, и вы просматриваете свой оригинальный список строк, каждый раз, когда вы встречаете слово, вы помещаете его в последний список вашегосписок списка, и каждый раз, когда вы сталкиваетесь с '', вы создаете новый список в своем списке списка.Вывод для вашего примера будет:

[['jeff','ham','boat'],['my','name','hello']]
0 голосов
/ 23 октября 2018

Это один подход с использованием простой итерации.

Пример:

myList = ['jeff','ham','boat','','my','name','hello']
result = [[]]
for i in myList:
    if not i:
        result.append([])
    else:
        result[-1].append(i)
print(result)

Вывод:

[['jeff', 'ham', 'boat'], ['my', 'name', 'hello']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...