5

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/エレガントな方法は何でしょうか?

4

5 に答える 5

8

itertools を使用して簡潔なソリューションを作成できます。

groups = []
for k,g in itertools.groupby(input_list, lambda x: x is not None):
    if k:
        groups.append(list(g))
于 2012-08-19T02:42:02.443 に答える
3

インポートitertools.groupbyしてから:

list(list(g) for k,g in groupby(inputList, lambda x: x!=None) if k)
于 2012-08-19T03:06:26.397 に答える
1

これを行う組み込みの方法はありません。考えられる実装の 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
于 2012-08-19T02:37:40.850 に答える
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)
于 2012-08-19T02:38:04.377 に答える
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]]
于 2012-08-19T03:03:18.660 に答える