我正在尝试将从.csv文件中读取的列分隔为多维数组。因此,如果将第一列读入单个数组,并且看起来像这样:
t = ['90-0066', '24', '33', '34', '91-0495', '22', '33', '92-6676', '23', '32']
我该如何在python中为每个值(例如“ 90-0066”)编写代码,将以下数字放入数组中,直到下一个-值?所以我希望数组看起来像这样:
t = [['24', '33', '34'], ['22', '33'], ['23', '32']]
谢谢!
答案 0 :(得分:3)
您可以在列表理解中使用itertools.groupby
:
from itertools import groupby
t = [list(g) for k, g in groupby(t, key=str.isdigit) if k]
t
变为:
[['24', '33', '34'], ['22', '33'], ['23', '32']]
如果数字可能是浮点数,则可以改用正则表达式:
import re
t = [list(g) for k, g in groupby(t, key=lambda s: bool(re.match(r'\d+(?:\.\d+)?$', s)) if k]
答案 1 :(得分:1)
或者最长zip
,并且具有两个列表理解:
>>> from itertools import zip_longest
>>> l=[i for i,v in enumerate(t) if not v.isdigit()]
>>> [t[x+1:y] for x,y in zip_longest(l,l[1:])]
[['24', '33', '34'], ['22', '33'], ['23', '32']]
>>>