Python中的列表是否有str.split等价物?

时间:2012-08-19 02:34:30

标签: python string list

如果我有一个字符串,我可以使用str.split方法将其拆分为空格:

"hello world!".split()

返回

['hello', 'world!']

如果我有一个像

这样的清单
['hey', 1, None, 2.0, 'string', 'another string', None, 3.0]

是否存在将None拆分并给我

的拆分方法
[['hey', 1], [2.0, 'string', 'another string'], [3.0]]

如果没有内置方法,最好的Pythonic /优雅方法是什么?

5 个答案:

答案 0 :(得分:7)

使用itertools可以生成简洁的解决方案:

groups = []
for k,g in itertools.groupby(input_list, lambda x: x is not None):
    if k:
        groups.append(list(g))

答案 1 :(得分:2)

导入itertools.groupby,然后:

list(list(g) for k,g in groupby(inputList, lambda x: x!=None) if k)

答案 2 :(得分:1)

没有内置方法可以做到这一点。这是一种可能的实现方式:

def split_list_by_none(a_list):
    result = []
    current_set = []
    for item in a_list:
        if item is None:
            result.append(current_set)
            current_set = []
        else:
            current_set.append(item)
    result.append(current_set)
    return result

答案 3 :(得分:1)

# Practicality beats purity
final = []
row = []
for el in the_list:
    if el is None:
        if row:
            final.append(row)
        row = []
        continue
    row.append(el)

答案 4 :(得分:0)

def splitNone(toSplit:[]):
    try:
        first = toSplit.index(None)
        yield toSplit[:first]
        for x in splitNone(toSplit[first+1:]):
            yield x
    except ValueError:
        yield toSplit

>>> list(splitNone(['hey', 1, None, 2.0, 'string', 'another string', None, 3.0]))
[['hey', 1], [2.0, 'string', 'another string'], [3.0]]