我有the Thoracic Surgery dataset从the UCI dataset repository。
从这个数据集的单行看起来是这样的:将列表中的二维列表拆分为新列表
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]
现在,我想要做的就是把子列表名单成子列表的两个列表,其中:
- 第一个列表的
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食谱或somthing出了numpy,会更适合这个?
什么版本的Python? 'a,* b,c = [1,2,3,4,5,6]'没有某种新的语法,它会自动分配'b',而不是被'a'抓住并且'C'? – mhlester
@mhlester:很好的问题。不幸的是,我在2.7。我认为你的意思是来自python3的'a,* b,c = [1,2,3,4,5]'? – inspectorG4dget
是的,当我介绍时我并不积极,但它当然不在2.7上。 drat :( – mhlester