2012-11-16 4 views
1

У меня есть список:Как я могу разбить список на более мелкие списки?

lists = (['1','2','3','S','3','4','S','4','6','7']) 

И я хочу, чтобы разбить список на S меньше список каждый раз, когда «S» появляется и устранить «S» во что-то вроде:

([['1','2','3'],['3','4],['4','6','7']]) 

Мой код:

def x (lists): 
    empty = '' 
    list = [] 

    for x in lists: 
     if x == empty: 
      list[-1:].append(x) 
     else: 
      list.append([x]) 

    return (list) 

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

ответ

1

Может быть что-то вроде map(list,''.join(lists).split('S'))

С другой стороны, [list(s) for s in ''.join(lists).split('S'))

5

Попробуйте itertools.groupby():

>>> from itertools import groupby 
>>> lists = ['1','2','3','S','3','4','S','4','6','7'] 
>>> [list(g[1]) for g in groupby(lists, lambda i:i!='S') if g[0]] 
[['1', '2', '3'], ['3', '4'], ['4', '6', '7']] 
+0

Привет, Спасибо за помощь! Тем не менее, этот ответ работает, однако, есть ли какие-либо решения относительно того, что у меня есть? Я не думаю, что я так далеко, и я предпочел бы придерживаться того, что я сейчас понимаю, так как я совершенно новый! – user1828072

+0

'groupby()' является ключевым моментом здесь. Возможно, вам потребуется прочитать документ python. – kev

+0

@ user1828072 Проблема с «исправлением того, что у вас уже есть» - это ваш подход. , , ну, не особенно пифонов. Это не значит (конечный результат), что ваш подход неправильный, менее предпочтительный и, вероятно, менее эффективный. – jpm

1

Ну, может быть смешно, но это должно работать:

[s.split('#') for s in '#'.join(lists).split('#S#')] 

Вместо того, '#' любой символ может быть использован, если он вряд ли появится в lists.

Смежные вопросы