2

I have a list of lists (nLedgers) such as:

[['173', '0.', '0.', '0.'], ['183', '1000.', '0.', '0.'], ['184', '0.', '1000.', '0.'], ['194', '1000.', '1000.', '0.'], ['195', '0.', '0.', '1000.'], ['205', '1000.', '0.', '1000.'], ['206', '0.', '1000.', '1000.'], ['216', '1000.', '1000.', '1000.'], ['217', '0.', '0.', '2000.'], ['227', '1000.', '0.', '2000.'], ['228', '0.', '1000.', '2000.'], ['238', '1000.', '1000.', '2000.'], ['239', '0.', '0.', '3000.'], ['249', '1000.', '0.', '3000.'], ['250', '0.', '1000.', '3000.'], ['260', '1000.', '1000.', '3000.'], ['261', '0.', '0.', '4000.'], ['271', '1000.', '0.', '4000.'], ['272', '0.', '1000.', '4000.'], ['282', '1000.', '1000.', '4000.'], ['283', '0.', '0.', '0.'], ['293', '0.', '1000.', '0.'], ['294', '1000.', '0.', '0.'], ['304', '1000.', '1000.', '0.'], ['305', '0.', '0.', '1000.'], ['315', '0.', '1000.', '1000.'], ['316', '1000.', '0.', '1000.'], ['326', '1000.', '1000.', '1000.'], ['327', '0.', '0.', '2000.'], ['337', '0.', '1000.', '2000.'], ['338', '1000.', '0.', '2000.'], ['348', '1000.', '1000.', '2000.'], ['349', '0.', '0.', '3000.'], ['359', '0.', '1000.', '3000.'], ['360', '1000.', '0.', '3000.'], ['370', '1000.', '1000.', '3000.'], ['371', '0.', '0.', '4000.'], ['381', '0.', '1000.', '4000.'], ['382', '1000.', '0.', '4000.'], ['392', '1000.', '1000.', '4000.'], ['436', '-1000.', '0.', '0.'], ['446', '0.', '0.', '0.'], ['447', '-1000.', '1000.', '0.'], ['457', '0.', '1000.', '0.'], ['458', '-1000.', '1000.', '1000.'], ['468', '0.', '1000.', '1000.'], ['469', '-1000.', '1000.', '2000.'], ['479', '0.', '1000.', '2000.'], ['480', '-1000.', '1000.', '3000.'], ['490', '0.', '1000.', '3000.'], ['491', '-1000.', '0.', '0.'], ['501', '-1000.', '1000.', '0.'], ['502', '-1000.', '1000.', '4000.'], ['512', '0.', '1000.', '4000.'], ['513', '-1000.', '0.', '1000.'], ['523', '0.', '0.', '1000.'], ['524', '-1000.', '0.', '2000.'], ['534', '0.', '0.', '2000.'], ['535', '-1000.', '0.', '3000.'], ['545', '0.', '0.', '3000.'], ['546', '-1000.', '0.', '4000.'], ['556', '0.', '0.', '4000.'], ['557', '-1000.', '0.', '1000.'], ['567', '-1000.', '1000.', '1000.'], ['568', '-1000.', '0.', '3000.'], ['578', '-1000.', '1000.', '3000.'], ['579', '-1000.', '0.', '2000.'], ['589', '-1000.', '1000.', '2000.'], ['590', '-1000.', '0.', '4000.'], ['600', '-1000.', '1000.', '4000.'], ['687', '0.', '2000.', '0.'], ['697', '1000.', '2000.', '0.'], ['698', '0.', '2000.', '1000.'], ['708', '1000.', '2000.', '1000.'], ['709', '0.', '2000.', '2000.'], ['719', '1000.', '2000.', '2000.'], ['720', '0.', '2000.', '3000.'], ['730', '1000.', '2000.', '3000.'], ['731', '0.', '2000.', '4000.'], ['741', '1000.', '2000.', '4000.'], ['742', '0.', '1000.', '0.'], ['752', '0.', '2000.', '0.'], ['753', '1000.', '1000.', '1000.'], ['763', '1000.', '2000.', '1000.'], ['764', '1000.', '1000.', '3000.'], ['774', '1000.', '2000.', '3000.'], ['775', '1000.', '1000.', '0.'], ['785', '1000.', '2000.', '0.'], ['786', '1000.', '1000.', '2000.'], ['796', '1000.', '2000.', '2000.'], ['797', '1000.', '1000.', '4000.'], ['807', '1000.', '2000.', '4000.'], ['808', '-1000.', '1000.', '0.'], ['818', '-1000.', '2000.', '0.'], ['819', '0.', '1000.', '1000.'], ['829', '0.', '2000.', '1000.'], ['830', '0.', '1000.', '2000.'], ['840', '0.', '2000.', '2000.'], ['841', '0.', '1000.', '3000.'], ['851', '0.', '2000.', '3000.'], ['852', '0.', '1000.', '4000.'], ['862', '0.', '2000.', '4000.'], ['863', '-1000.', '2000.', '0.'], ['873', '0.', '2000.', '0.'], ['874', '-1000.', '2000.', '1000.'], ['884', '0.', '2000.', '1000.'], ['885', '-1000.', '2000.', '2000.'], ['895', '0.', '2000.', '2000.'], ['896', '-1000.', '2000.', '3000.'], ['906', '0.', '2000.', '3000.'], ['907', '-1000.', '2000.', '4000.'], ['917', '0.', '2000.', '4000.'], ['918', '-1000.', '1000.', '1000.'], ['928', '-1000.', '2000.', '1000.'], ['929', '-1000.', '1000.', '3000.'], ['939', '-1000.', '2000.', '3000.'], ['940', '-1000.', '1000.', '2000.'], ['950', '-1000.', '2000.', '2000.'], ['951', '-1000.', '1000.', '4000.'], ['961', '-1000.', '2000.', '4000.']]

I'd like to transform the first column to integer without the dot sign, and the rest to floats.

I used this code to transform all columns to floats:

nLedgers=[[float(j) for j in i] for i in nLedgers]

and this to try my goal:

nLedgers=[[[if index==0 int(j), if index>0 float(j)] for index,j in i] for i in nLedgers]

I've got a syntax error in my code. I think I'm pretty close but I need your help.

4

3 回答 3

4

像这样的东西:

In [69]: nLedgers=[['173', '0.', '0.', '0.'], ['183', '1000.', '0.', '0.'], ['184', '0.', '1000.', '0.']]

In [70]: [ [int(x[0])] + map(float,x[1:]) for x in nLedgers]
Out[70]: [[173, 0.0, 0.0, 0.0], [183, 1000.0, 0.0, 0.0], [184, 0.0, 1000.0, 0.0]]

或者:

In [71]: [ [int(x[0])] + [float(y) for y in x[1:]] for x in nLedgers]
Out[71]: [[173, 0.0, 0.0, 0.0], [183, 1000.0, 0.0, 0.0], [184, 0.0, 1000.0, 0.0]]

list(map(float,x[1:]))以防你使用 py3x 。

于 2013-04-26T17:46:23.480 回答
2

你的尝试非常接近。因此,虽然它可能不一定是最简洁或最 Pythonic 的方式,但它可能对您来说很容易理解。

你写了这个:

nLedgers=[[[if index==0 int(j), if index>0 float(j)] for index,j in i] for i in nLedgers]

您的第一个问题是 aSyntaxError因为那不是您编写if表达式的方式。

给你int(j)if index==0,否则给你float(j)的表达式如下所示:

int(j) if index==0 else float(j)

几乎是英文的直接翻译。


您的下一个问题是您正在尝试做for index, j in i,这是行不通的,因为i它只是一个值序列,而不是索引和值j对的序列。j

但是内置enumerate函数正是为了这个目的:它将一个值序列转换为一个索引值对序列。所以,只是为了for index, j in enumerate(i)


因此,如果此代码将所有内容转换为浮点数:

nLedgers=[[float(j) for j in i] for i in nLedgers]

我们可以首先添加enumerate以获取所有索引:

nLedgers=[[float(j) for index, j in enumerate(i)] for i in nLedgers]

然后添加条件表达式以使用这些索引:

nLedgers=[[(int(j) if index==0 else float(j)) for index, j in enumerate(i)] for i in nLedgers]
于 2013-04-26T18:03:39.523 回答
0

尝试这个:

for i in range(len(nLedgers)):
    i[0]=int(nLegders[0])
    for j in range(1,len(nLedgers[i])):
        nLedgers[i][j]=float(nLedgers[i][j])

这是您正在寻找的答案

于 2013-04-26T17:47:15.007 回答