2013-05-03 83 views
0

我有以下的2D名单如何迭代python 2D列表并删除/替换特定列中的字符?

data = [['2013-02-03', 'London', 'miles', '25'], ['2013-02-03', 'Newcastle', 'miles', '25'], ['2013-02-03', 'Birmingham', 'miles', '62']] 

我需要能够移除任何''在列 e.g最后一栏下面,所以我可以通过2D名单的JavaScript函数在一个文本文件中。

data = [['2013-02-03', 'London', 'miles', 25], ['2013-02-03', 'Newcastle', 'miles', 25], ['2013-02-03', 'Birmingham', 'miles', 62]] 

我有一个功能,可以得到一个数值结果

r = "['2013-02-03', 'London', 'miles', '25']" 


def rreplace(s, old, new, occurrence): 
    li = s.rsplit(old, occurrence) 
    return new.join(li) 

    rreplace(p, "'", '', 2) 

"['2013-02-03', 'Feltham', 'less_than_one_day', 25]," 

任何人都可以提出一个更好的方式来实现这一结果?

我已经尝试了很多方法:for循环,map/lambda和 iter,我可以遍历列表或更改单个列表中的元素 只是不能同时输出结果。

回答

3

只是过程值的列表作为的Python:

for row in data: 
    row[-1] = int(row[-1]) 

这与他们的整数相当于data嵌套列表替换每个最后一个元素。

接下来,使用json模块把它变成有效的JavaScript:

import json 

r = json.dumps(data) 

JSON是JavaScript的一个子集,毕竟。

快速演示:

>>> data = [['2013-02-03', 'London', 'miles', '25'], ['2013-02-03', 'Newcastle', 'miles', '25'], ['2013-02-03', 'Birmingham', 'miles', '62']] 
>>> for row in data: 
...  row[-1] = int(row[-1]) 
... 
>>> data 
[['2013-02-03', 'London', 'miles', 25], ['2013-02-03', 'Newcastle', 'miles', 25], ['2013-02-03', 'Birmingham', 'miles', 62]] 
>>> import json 
>>> json.dumps(data) 
'[["2013-02-03", "London", "miles", 25], ["2013-02-03", "Newcastle", "miles", 25], ["2013-02-03", "Birmingham", "miles", 62]]' 
+0

你知道,如果有什么办法能更Python的方式写,使用列表理解或地图吗? – ibi0tux 2013-05-03 13:57:20

+1

@ ibi0tux:你可以,但是重新创建列表的其余部分没有多少意义,是吗?在这种特定情况下使用循环更有效。 'data = [elem [: - 1] + [int(elem [-1])] for elem in data]'几乎不可读。 – 2013-05-03 13:58:47

+0

@ ibi0tux:使用较新的语法并不总是会使pythonic代码变得更多。 – 2013-05-03 14:00:02