处理嵌套for循环的最佳方法是什么?

时间:2018-01-24 16:26:41

标签: python

我试图根据表单中选定的选项将记录保存到我的数据库。

我试图使用的代码一直告诉我j在先前的列表中的j和j中不存在。

if request.method == 'POST':
    for i in courselist and j in previouscourselist:
        requestsave(courselist and = i, previouscourselist= j)

使用以下内容。对于第一部分,记录在courselist中使用for i正确循环。 previouscourselist将作为列表[####,####,####]等编写。但是,这不是我想要的。

   if request.method == 'POST':
        for i in courselist
            requestsave(courselist = i, previouscourselist= previouscourselist)

嵌套forloop的正确方法是什么,所以它循环通过courselist列表和之前的thecourselist?在有不同的courselist和previouscourselist的地方写个人记录?

我想要完成的是拥有requestsave(courselist = i, and previouscourselist = j)所以它是这样写的:

CourseID   PreviousCourseID
2000       1001
2000       1015
2001       1001
2001       1015
2002       1001
2002       1015

目前正在使用

  if request.method == 'POST':
        for i in courselist
            requestsave(courselist = i, previouscourselist= previouscourselist)

它将上述语句写为数据库

CourseID    PreviousCourse
2000        [1001, 1015]
2001        [1001, 1015]
2002        [1001, 1015]

2 个答案:

答案 0 :(得分:3)

首先,您的语法建议您要存储索引而不是项目本身。如果需要枚举,语法将为:

if request.method == "POST":
    for item_course, i in enumerate(courselist):
        for item_prev_course, j in enumerate(previouscourselist):
            requestsave(courselist=i, previouscourselist=j)

否则,如果您想存储该项目,最好使用更好的变量名称,以便读者更容易理解您的代码。

if request.method == "POST":
    for current_course in courselist:
        for prev_course in previouscourselist:
           requestsave(courselist=current_course, previouscourselist=prev_course)

如果要将列表加入到一对一关系的字典中,可以使用 zip()函数,如下所示:

if request.method == "POST":
    course_dict = dict(zip(courselist, previouscourselist)

然后沿着该字典迭代

   for course, prev_course in course_dict:
       requestsave(courselist=course, previouscourselist=prev_course)

答案 1 :(得分:1)

你的意思是:

if request.method == 'POST':
    for i in courselist:
        for j in previouscourselist:
            requestsave(courselist=i, previouscourselist=j)

如果这可以解决您的问题:还有其他方法可以实现您的目标,但如果您还不知道如何做到这一点,那么它们可能不适合您。