繁体   English   中英

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

[英]Split Python list of strings into seperate lists based on character

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

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

我想在引入每个“@”符号后创建一个列表。 例如,我希望 output 如下所示:

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

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

这可能吗?

你可以使用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']]

像这样:

>>> 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']] 

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

在列表中以'@'重复查找元素的索引,从前一个位置'@'并取结果中间的任何内容。

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']]

这似乎是more_itertools.split_before的完美用法。 由此产生的一行既简洁又清晰。

from more_itertools import split_before

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

processed = [sublist for sublist in split_before(original, lambda i: i == '@')]

print(processed)

Output(为清楚起见添加了换行符):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM