将Python字符串列表拆分为基于字符的单独列表

时间:2014-03-30 18:05:17

标签: python algorithm list

我试图找出如何根据列表中的字符将以下列表拆分为单独的列表。

list = ['@', '2014', '00:03:01', 'Matt', '"login"', '0.01', '@', '2014', '02:06:12', 'Mary', '"login"', '0.01']

我想在每个" @"之后创建一个列表。符号介绍。例如,我希望输出如下:

NewList1 = ['@', '2014', '00:03:01', 'Matt', '"login"', '0.01'] 

NewList2 = ['@', '2014', '02:06:12', 'Mary', '"login"', '0.01']

这可能吗?

3 个答案:

答案 0 :(得分:8)

您可以使用itertools.groupby

import itertools as IT
import operator

seq = ['@', '2014', '00:03:01', 'Matt', '"login"', '0.01', '@', '2014', '02:06:12', 'Mary', '"login"', '0.01']

groups = (list(g) for k,g in IT.groupby(seq, lambda item: item=='@'))
print(list(IT.starmap(operator.add, IT.izip(*[groups]*2))))

打印

[['@', '2014', '00:03:01', 'Matt', '"login"', '0.01'], ['@', '2014', '02:06:12', 'Mary', '"login"', '0.01']]

答案 1 :(得分:4)

像这样:

>>> lst=['@', '2014', '00:03:01', 'Matt', '"login"', '0.01', '@', '2014', '02:06:12', 'Mary', '"login"', '0.01']
>>> [item.split() for item in ' '.join(lst).split('@') if item]
[['2014', '00:03:01', 'Matt', '"login"', '0.01'], 
 ['2014', '02:06:12', 'Mary', '"login"', '0.01']] 

所以这基本上做的是将列表加在一起,在@上重新拆分,然后将每个组转换回列表。

答案 2 :(得分:1)

'@'的前一个位置开始,在列表中反复找到'@'元素的索引,并取结果中间的任何内容。

idx, result = 0, []
while True:
    try:
        temp = my_list.index('@', idx + 1)
        result.append(my_list[idx + 1:temp])
        idx = temp
    except ValueError, e:
        result.append(my_list[idx + 1:])
        break
print result
# [['2014', '00:03:01', 'Matt', '"login"', '0.01'],
#  ['2014', '02:06:12', 'Mary', '"login"', '0.01']]