将第一列转换为整数,将其转换为浮点数

时间:2013-04-26 17:44:13

标签: python

我有一个列表列表(nLedgers),例如:

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

我希望将第一列转换为不带点符号的整数,其余部分转换为浮点数。

我使用此代码将所有列转换为浮点数:

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

这是为了实现我的目标:

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

我的代码中出现语法错误。我觉得我很接近,但我需要你的帮助。

3 个答案:

答案 0 :(得分: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]]

如果您正在使用py3x,请使用list(map(float,x[1:]))

答案 1 :(得分:2)

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

你写过:

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

你的第一个问题是SyntaxError,因为这不是你写if expressions的方式。

如果int(j)给你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)


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

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]

答案 2 :(得分: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])

这是您正在寻找的答案