跟踪多个循环中的列表值

时间:2017-01-23 15:46:45

标签: python python-2.7

我们假设我们有以下情况:

for a, b, c, d in some_function('some_file.txt'):
    for i in range(1, 16):
        for x in json_data[str(i)]["commune"]:
            print json_data[str(i)]["commune"][str(x)]["code"].encode('utf-8')
  • abcd yield来自some_function(...)
  • i显然需要1 <= i < 16
  • 范围内的值
  • x表示来自 json 结构
  • 的对象

现在,我似乎无法找到解决问题的方法是通过每个循环一次,但跟踪值,以便我可以在下一次迭代时从那里开始。

例如,让我们想象三个列表:

list_1 = [1, 2, 3, 4, 5, 6, 7, 8]
list_2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list_3 = [1, 2, 3, 4]
  • 在第一个中,我将1,2,3,4
  • 在内圈我会1 - &gt;第一个国家
  • 在第二个内循环中,我还有1 - &gt;第一个国家的第一个城市
  • 在第二次迭代中,第一次,我将5,6,7,8
  • 在内循环中,我将再次1 - &gt;第一个国家(这个国家还有城市)
  • 在第二个内循环中,我将2 - &gt;来自第一个国家的第二个城市

依旧......

现在,因为最后for通过 json 结构(例如here),我必须经历它的所有值,总是使用不同的{{ 1}}但是在json值完成之前使用相同的a,b,c,d

实际示例

想象一下如下:

  • 具有a,b,c,d信息的用户登录网站
  • 在该网站上有两个下拉菜单(国家/地区(i)和城市(i))。当一个国家的所有城市都被浪费时,去下一个国家,依此类推。 我想要的是获得一个国家的每个城市,总是与不同的用户。

关于如何实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:1)

简化您的代码,您希望在其他地方关注json_data

def f():
    for a, b, c, d in some_function('some_file.txt'):
        for i in range(1, 16):
            for x in json_data[str(i)]["commune"]:
                yield a, b, c, d, i, x

for a, b, c, d, i, x in f():
    print json_data[str(i)]["commune"][str(x)]["code"].encode('utf-8')

根据您的描述,您希望同时通过外部循环some_function和两个内部循环。 这意味着你需要做两件事:

  1. 展平两个内环。

    g = (
        (i, x)
        for i in range(1, 16)
        for x in json_data[str(i)]["commune"]
    )
    
  2. zip通过两个循环。

    zip(some_function('some_file.txt'), g)
    
  3. 这可以让你得到一些简单的东西:

    g = (
        (i, x)
        for i in range(1, 16)
        for x in json_data[str(i)]["commune"]
    )
    
    for (a, b, c, d), (i, x) in zip(some_function('some_file.txt'), g):
        print json_data[str(i)]["commune"][str(x)]["code"].encode('utf-8')
    

答案 1 :(得分:0)

你总是可以尝试使用while循环手动迭代,在嵌套循环中,所以你可以说:

while(a != 0):
    while(b != 6):
        if(b%2 == 0):
             a++
        b++
 a++
这样,即使你的b数是偶数,它也会增加。(双关语无意)