如果我有一个字符串,我可以使用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 /优雅方法是什么?
答案 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]]