当前位置: 首页 > 知识库问答 >
问题:

按二维列表的列拆分为新列表

谢华彩
2023-03-14

我有UCI数据仓库中的胸部手术数据集
此数据集中的一行如下所示:

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

我有一个脚本可以将这些行读入子列表:
每个子列表都是文件中的一行,包含一些数据转换(大多数情况下,只是将行中的每个元素转换为一些数值;这部分与问题无关)

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

[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]

现在,我想做的是将这个子列表转换为两个子列表,其中:

  • 第一个列表的ith子列表包含所有元素,但原始列表的ith子列表的最后一个元素除外
  • 第二个列表的第一个子列表只包含原始列表第一个子列表的最后一个元素。

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

[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的某些东西更适合这个?

共有1个答案

房育
2023-03-14

就处理列表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])

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

 类似资料:
  • 如何将这列列表拆分为两列? 期望的结果:

  • 我有一个对象(Pos)与此模型的集合: 对象列表如下所示: 我想按beforeChangement或afterChangement==”字段拆分此对象列表要使用此格式(列表列表)

  • 感兴趣的是在同一pyspark数据帧中将列表的这一列拆分为多列的scala-spark实现 给定该数据帧: 我想要一个新的数据帧,它包含分解值并映射到我提供的列名称: 尝试: 但它的格式错误,我不知道如何映射到我的 colNames 列表: 在上面的链接中,python的解决方案是使用列表理解: 但它没有显示如何使用提供的列名列表,因为列名只是列的索引。

  • 问题:如何将列表拆分为两个子列表,其中元素由元素中的选项卡分隔? 上下文:我想读取一个由制表符分隔的文件到Pandas DataFrame中。这些文件看起来像: 列1\t 123 列2\t 列3\t文本 这意味着每行有一列,后面跟着一个选项卡,然后是该列的一个值(有时没有值)。 我的想法是读取文件并将每行保存为列表的元素,然后将列表分成两个,将选项卡前的第一部分作为一个列表,选项卡后的第二部分作为

  • 我有一个Pandas DataFrame列,其中包含一个列表中的多个列表。类似于这样: 我想将列表拆分为多列,因此输出应该是这样的: 请帮我做这件事。预先感谢

  • 问题内容: 这个问题类似于将 列表切成子列表的列表 ,但是在我的情况下,我想包括每个先前子列表的最后一个元素,作为下一个子列表的第一个元素。并且必须考虑到最后一个元素必须始终至少包含两个元素。 例如: 大小为3的子列表的结果: 问题答案: 通过简单地缩短传递到范围的“ step”参数,可以轻松地将链接的答案中的列表理解用于支持重叠的块: 这个问题的其他访问者可能没有足够的精力来处理输入 列表 (可