【问题标题】:Python zip for loop only executing once instead of 60 times [closed]Python zip for循环仅执行一次而不是60次[关闭]
【发布时间】:2016-11-09 14:39:01
【问题描述】:

我有许多 python 列表,我从中将数据传输到 MySQL 数据库。 从技术上讲,每个列表变量都有 60 个值。但是在执行for循环时,只更新了1条记录而不是60条。我使用python zip格式很长时间了,从来没有遇到过问题。

flg=1
prodcat="sac"

for a,b,c,d,e,f,g,h,o,p,q,r,s,t,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as1,at1,au in zip(lipgurl,lipdate,lides,liref,liname,licontry,listype,liprice,licurcy,lim,licolor,licond,lisize,liwidth,liheight,lidepth,liwish,limsg,liselracc,librand,liuoid,lifolby,lifolwing,lilikes,lisolddt,libuyer,liusprice,lipbought,libuyernm,libuyacc,libuycont,libuytype,liselrid,lisrcpage):
    myid="VC"+str(flg)
    cur.execute("INSERT INTO details VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(myid,a,au,ag,rdate,b,prodcat,c,d,e,at1,f,g,h,o,an,p,q,r,s,t,ab,ac,ad,ae,af,ai,aj,ak,al,am,ao,ap,aq,ar,as1))
    flg=flg+1
    print("Database updated")
con.commit()

为了检查每个列表变量中是否有 60 个值,我在上面的循环中插入了一个循环并打印。它打印出所有 60 个值。

我哪里错了?有什么建议吗?

【问题讨论】:

    标签: python mysql loops python-3.x for-loop


    【解决方案1】:

    很可能您的列表中只有一个元素,因此 zip 仅返回一个项目元组,使用 itertools.zip_longest 而不是 zip 应该可以解决您的问题(您会得到项目的填充 zip...):

    from itertools import zip_longest
    
    
    flg=1
    prodcat="sac"
    
    for a,b,c,d,e,f,g,h,o,p,q,r,s,t,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as1,at1,au\
            in zip_longest(lipgurl,lipdate,lides,liref,liname,licontry,listype,liprice,licurcy,lim,
                            licolor,licond,lisize,liwidth,liheight,lidepth,liwish,limsg,liselracc,librand,
                            liuoid,lifolby,lifolwing,lilikes,lisolddt,libuyer,liusprice,lipbought,libuyernm,
                            libuyacc,libuycont,libuytype,liselrid,lisrcpage):
        myid="VC"+str(flg)
        cur.execute("INSERT INTO details VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(myid,a,au,ag,rdate,b,prodcat,c,d,e,at1,f,g,h,o,an,p,q,r,s,t,ab,ac,ad,ae,af,ai,aj,ak,al,am,ao,ap,aq,ar,as1))
        flg=flg+1
        print("Database updated")
    con.commit()
    

    【讨论】:

    • @Andriy 谢谢老兄!有效!。我从来不知道有这样的东西存在。只有一个更正,在 python 3 中,我们使用 zip_longest 而不是 izip_longest。我想知道谁对你的回答投了反对票!如果我有声望,我会投票赞成。
    • @Ro_nair,你的问题清楚地说明了 为了检查每个列表变量是否有 60 个值,我在上面的循环中插入了一个循环并打印。它打印出所有 60 个值。,如果你得到了所有 60 个值,怎么可能缺少 59 个?
    • @PadraicCunningham 在上面的循环中,我插入了另一个循环为 for item in lipgurl: print(item) 。我实际上单独检查了随机列表是否有 60 个值。所以,如果我一次取 1 个列表变量并打印它,它会打印出全部 60 个,但不是以 zip 格式。现在使用 ablove 答案更正了
    • @Ro_nair 答案已更新,感谢您的指正!很高兴帮助你)祝你好运!
    • @AndriyIvaneyko 谢谢!说到支持你的答案,我现在终于有了这么多的声誉。大声笑:)
    猜你喜欢
    • 2017-03-13
    • 2016-11-22
    • 1970-01-01
    • 2022-06-18
    • 2020-07-24
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多