通过按值拆分列表来创建子列表
Create sublists by splitting list at a value
我有一长串清单。以下是它的摘录。
['1', '15943882', '63', '1', '-9', '-9', '-9', '-27', '1', '145',
'1', '233', '-9', '50', '20', '1', '0', '1', '2', '2', '3',
'1981', '0', '0', '0', '0', '0', '1', '10.5', '6', '13', '150',
'60', '190', '90', '145', '85', '0', '0', '2.3', '3', '-9', '-9',
'0', '-9', '-9', '-9', '-9', '-9', '-9', '6', '-9', '-9', '-9',
'2', '16', '1981', '0', '1', '1', '1', '-9', '1', '-9', '1',
'-9', '1', '1', '1', '1', '1', '1', '1', '-9', '-9', '0', '-9',
'-9', '-9', '-9', '-9', '-9', '-9', '-9', '-9', '0', '0', '0',
'0', 'name', '2', '15964847', '67', '1', '-9', '-9', '-9', '-27',
'4', '160', '1', '286', '-9', '40', '40', '0', '0', '1', '2',
'3', '5', '1981', '0', '1', '0', '0', '0', '1', '9.5', '6',
'13', '108', '64', '160', '90', '160', '90', '1', '0', '1.5',
'2', '-9', '-9', '3', '-9', '-9', '-9', '-9', '-9', '-9', '3',
'-9', '-9', '-9', '2', '5', '1981', '2', '1', '2', '2', '-9',
'2', '-9', '1', '-9', '1', '1', '1', '1', '1', '1', '1', '-9',
'-9', '0', '-9', '-9', '-9', '-9', '-9', '-9', '-9', '-9', '-9',
'0', '0', '0', '0', 'name']
我如何创建 2 个按值 'name'
拆分的列表?值 'name'
处的索引在整个列表中并不总是相同,仅供参考。
idx = x.index('name')
(x[0:idx], x[idx+1:])
这将在 'name' 的第一个索引处拆分。
库 iteration_utilities
中有一个 split
函数在这种情况下可能很有用:
>>> from iteration_utilities import split
>>> l1, l2 = split(your_list, key='name', eq=True)
>>> l1
['1', '15943882', '63', '1', '-9', '-9', '-9', '-27', '1', '145', '1',
'233', '-9', '50', '20', '1', '0', '1', '2', '2', '3', '1981', '0',
'0', '0', '0', '0', '1', '10.5', '6', '13', '150', '60', '190', '90',
'145', '85', '0', '0', '2.3', '3', '-9', '-9', '0', '-9', '-9', '-9',
'-9', '-9', '-9', '6', '-9', '-9', '-9', '2', '16', '1981', '0', '1',
'1', '1', '-9', '1', '-9', '1', '-9', '1', '1', '1', '1', '1', '1',
'1', '-9', '-9', '0', '-9', '-9', '-9', '-9', '-9', '-9', '-9', '-9',
'-9', '0', '0', '0', '0']
请注意,这会从结果中删除 key
(在本例中为 'name'
)。
该函数还可以将列表拆分为多个部分,如果不需要,您可以指定 maxsplit=1
.
注意:我是库的作者 iteration_utilities
。提一下:在纯 Python:
中实现此功能也很容易
def split(iterable, delimiter):
lst = []
for item in iterable:
if item == delimiter:
yield lst
lst = []
else:
lst.append(item)
if lst:
yield lst
要将列表拆分为多个 name
元素,您可以使用标准模块中的 itertools.groupby()
:
>>> import itertools as it
>>> data = ['1', '15943882', '63', '1', '-9', '-9', '-9', '-27', '1', '145', '1', ...]
>>> [list(g) for k, g in it.groupby(data, lambda x: x=='name') if not k]
[['1', '15943882', '63', '1', '-9', '-9', '-9', '-27', '1', '145', ...
['2', '15964847', '67', '1', '-9', '-9', '-9', '-27', '4', '160', ...
我有一长串清单。以下是它的摘录。
['1', '15943882', '63', '1', '-9', '-9', '-9', '-27', '1', '145',
'1', '233', '-9', '50', '20', '1', '0', '1', '2', '2', '3',
'1981', '0', '0', '0', '0', '0', '1', '10.5', '6', '13', '150',
'60', '190', '90', '145', '85', '0', '0', '2.3', '3', '-9', '-9',
'0', '-9', '-9', '-9', '-9', '-9', '-9', '6', '-9', '-9', '-9',
'2', '16', '1981', '0', '1', '1', '1', '-9', '1', '-9', '1',
'-9', '1', '1', '1', '1', '1', '1', '1', '-9', '-9', '0', '-9',
'-9', '-9', '-9', '-9', '-9', '-9', '-9', '-9', '0', '0', '0',
'0', 'name', '2', '15964847', '67', '1', '-9', '-9', '-9', '-27',
'4', '160', '1', '286', '-9', '40', '40', '0', '0', '1', '2',
'3', '5', '1981', '0', '1', '0', '0', '0', '1', '9.5', '6',
'13', '108', '64', '160', '90', '160', '90', '1', '0', '1.5',
'2', '-9', '-9', '3', '-9', '-9', '-9', '-9', '-9', '-9', '3',
'-9', '-9', '-9', '2', '5', '1981', '2', '1', '2', '2', '-9',
'2', '-9', '1', '-9', '1', '1', '1', '1', '1', '1', '1', '-9',
'-9', '0', '-9', '-9', '-9', '-9', '-9', '-9', '-9', '-9', '-9',
'0', '0', '0', '0', 'name']
我如何创建 2 个按值 'name'
拆分的列表?值 'name'
处的索引在整个列表中并不总是相同,仅供参考。
idx = x.index('name')
(x[0:idx], x[idx+1:])
这将在 'name' 的第一个索引处拆分。
库 iteration_utilities
中有一个 split
函数在这种情况下可能很有用:
>>> from iteration_utilities import split
>>> l1, l2 = split(your_list, key='name', eq=True)
>>> l1
['1', '15943882', '63', '1', '-9', '-9', '-9', '-27', '1', '145', '1',
'233', '-9', '50', '20', '1', '0', '1', '2', '2', '3', '1981', '0',
'0', '0', '0', '0', '1', '10.5', '6', '13', '150', '60', '190', '90',
'145', '85', '0', '0', '2.3', '3', '-9', '-9', '0', '-9', '-9', '-9',
'-9', '-9', '-9', '6', '-9', '-9', '-9', '2', '16', '1981', '0', '1',
'1', '1', '-9', '1', '-9', '1', '-9', '1', '1', '1', '1', '1', '1',
'1', '-9', '-9', '0', '-9', '-9', '-9', '-9', '-9', '-9', '-9', '-9',
'-9', '0', '0', '0', '0']
请注意,这会从结果中删除 key
(在本例中为 'name'
)。
该函数还可以将列表拆分为多个部分,如果不需要,您可以指定 maxsplit=1
.
注意:我是库的作者 iteration_utilities
。提一下:在纯 Python:
def split(iterable, delimiter):
lst = []
for item in iterable:
if item == delimiter:
yield lst
lst = []
else:
lst.append(item)
if lst:
yield lst
要将列表拆分为多个 name
元素,您可以使用标准模块中的 itertools.groupby()
:
>>> import itertools as it
>>> data = ['1', '15943882', '63', '1', '-9', '-9', '-9', '-27', '1', '145', '1', ...]
>>> [list(g) for k, g in it.groupby(data, lambda x: x=='name') if not k]
[['1', '15943882', '63', '1', '-9', '-9', '-9', '-27', '1', '145', ...
['2', '15964847', '67', '1', '-9', '-9', '-9', '-27', '4', '160', ...