Python:嵌套for循环,提供不需要的输出

时间:2015-11-27 17:09:58

标签: python

_ax = ["Tim","Tom","Mat"]
_ay = [12,15,11]
_series = "["

for _x in _ax:
    _series = _series + '{"name": "%s"' % _x + ', "data": ['
    for _y in _ay:
        _series = _series + str(_y) + ","

_series = str(_series) + "]}]"
_series = str(_series).replace(",{","]},{").replace(",]","]")

理想情况下,上面的代码应该输出为:

series: [{
        "name": "Tim",
        "data": [12]
    }, {
        "name": "Tom",
        data: [15]
    }, {
        "name": "Mat",
        "data": [11]
    }]

然而,我的结果如下:

  series: [{
        "name": "Tim",
        "data": [12,15,11]
    }, {
        "name": "Tom",
        data: [12,15,11]
    }, {
        "name": "Mat",
        "data": [12,15,11]
    }]

我确信这与for循环有关。最好的办法是什么? PS:这只是实际代码的一个代表,它更大更复杂。

2 个答案:

答案 0 :(得分:1)

试试这个:

_ax = ["Tim","Tom","Mat"]
_ay = [12,15,11]
_series = '[ ' + ', '.join([ '{ "name": "%s", "data": [%d] }' % z for z in zip(_ax, _ay) ]) + ' ]'

有关详细信息,请参阅zip() documentation

希望这有帮助。

答案 1 :(得分:1)

您的代码完全符合您的要求:

for _x in _ax:
    _series = _series + '{"name": "%s"' % _x + ', "age": ['
    for _y in _ay:
        _series = _series + str(_y) + ","

第二个只是在_y中转储所有元素。它相当于",".join(map(str, _y),它创建一个字符串,其中_y中的元素作为逗号分隔列表。

如评论中所述,如果您要对_x_y的每个元素进行迭代,则应使用zip,如:

for name, data in zip(_x, _y):
    _series += repr({"name": name, "data": [data]})
    _series += ','