Быстрый способ разделить списки по значению? - PullRequest
0 голосов
/ 11 апреля 2020

Есть ли способ разбить список по определенному значению - по сути это string.split () для списков. Пример:

[1, 2, 4, 3, 5, 2, 5]

вернет

[[1], [4, 3, 5], [5]]

Я могу придумать несколько решений, которые будут медленными, но я использую это в попытке ускорить код, и поэтому если он будет медленно работать в списках длиной около 10 000 маленьких (single-di git) чисел, тогда это не поможет, я подумал о простом решении, таком как

list1 = [1, 2, 4, 3, 5, 2 etc.]
list2 = []
for i, val in enumerate(list1):
    if val == 2:
         list2.append([])
    else:
         list2[len(list2)-1].append(val)

, но я не уверен, что это действительно очень быстро. Есть ли лучший способ?

Ответы [ 2 ]

3 голосов
/ 11 апреля 2020

Мне нравится itertools.groupby для этого. Легко читать, быстро и эффективно использовать память благодаря длинным спискам:

from itertools import groupby

l = [1, 2, 4, 3, 5, 2, 5]

[list(g) for k, g in groupby(l, key=lambda x: x!=2) if k]
# [[1], [4, 3, 5], [5]]
0 голосов
/ 11 апреля 2020

хорошо, что я могу думать, это использовать list.index () и нарезку.

sep = somevalue
result = []
while sep in yourlist:
    sep_index = list.index(sep)
    result.append(list[:sep_index])
    result = result[sep_index+1:]

Это должно отделить длинный список от любого значения sep, которое вы установили

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...