按2d列表的列拆分为新的lis

2024-09-28 01:32:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有来自the UCI dataset repositorythe Thoracic Surgery dataset
此数据集中的一行如下所示:

DGN3,4.36,3.28,PRZ1,F,F,F,T,F,OC12,T,F,F,T,F,59,T

我有一个脚本将这些行读入子列表:
每个子列表是文件中的一行,包含数据的一些转换(主要是将行中的每个元素转换为一些数值;这部分与问题无关)

因此,每个子列表如下所示:

^{pr2}$

现在,我想把这个子列表变成两个子列表,其中:

  • 第一个列表的第i子列表包含除原始列表的第i子列表的最后一个元素之外的所有内容
  • 第二个列表的第i子列表只包含原始列表的第i子列表的最后一个元素。在

例如,上面显示的行(子列表)将分为两个子列表,如下所示:

[3.0, 4.36, 3.28, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 12.0, 1.0, 0.0, 0.0, 1.0, 0.0,59.0]
[1.0]

现在,我知道我可以很容易地做到以下几点:

features, classes = [], []
for subl in L:
    features.append(subl[:-1])
    classes.append([subl[-1]])

我想知道有没有更好的方法。有没有可能有一个itertools的食谱或者是一些numpy的东西更适合这个呢?在


Tags: the数据元素列表repositorydatasetclassesfeatures
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:06

在处理列表L方面,您拥有的代码已经是您所能做的最好的了。您可以将其简化为压缩列表理解,使其成为一行代码,但这不会降低其复杂性:

>>> L = [[1, 2, 3, 4, 5], [6, 7, 8, 9], [10, 11, 12], [13, 14, 15, 16, 17], [18, 19, 20]]
>>> features, classes = zip(*[(s[:-1], [s[-1]]) for s in L])
>>> features
([1, 2, 3, 4], [6, 7, 8], [10, 11], [13, 14, 15, 16], [18, 19])
>>> classes
([5], [9], [12], [17], [20])

如果处理时间确实是个问题,那么您应该考虑直接使用数据转换进行这些拆分,这样就不会生成最终不会使用的中间格式。在

相关问题 更多 >

    热门问题