列出问题python

时间:2016-10-22 08:46:24

标签: python list loops

我正在编写一个更广泛的算法,但我认为这个问题是它无法正常工作的原因。

这里有麻烦的代码片段..

difcheck = []
count = 1
questionsneeded = 4
required_dif = ["Easy", "Hard", "Medium", "Easy"]
required_topics = ["Graphs", "Math", "Geometry", "Fun"]
availablelist = [("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy")]
z = 0
answerlist = []

while z < questionsneeded:
    difs = required_dif
    topics = required_topics
    for x in range(len(availablelist)):
        if availablelist[x][0] in required_topics and availablelist[x][1] in required_dif :
        difcheck.append(availablelist[x])
            try:
                required_dif.remove(availablelist[x][0])
                required_topics.remove(availablelist[x][1])
            except ValueError as exception:
                continue    
    availablelist.append(availablelist[0])          
    answerlist.append(len(difcheck))
    del availablelist[0]
    print("availablelist ")
    print(availablelist)
    print("difcheck ")
    print(difcheck) 
    z = z + 1 
    del availablelist[0]
    del difcheck[:]

代码查看availablelist中的元组,并将tuple元素0与required_dif和tuple元素1中的每个元素与required_topics中的每个元素进行比较。

如果在两个列表中都找到了两者,则元组将被添加到difcheck。

然后重复这个,直到z =问题需要,可用列表中的元组应该每次都被洗牌。

我得到的输出是

availablelist 
[('Fun', 'aasd'), ('Geometry', 'Medium'), ('Math', 'Easy'), ('Graphs', 'Easy')]
difcheck 
[('Graphs', 'Easy'), ('Geometry', 'Medium'), ('Math', 'Easy')]
availablelist 
[('Math', 'Easy'), ('Graphs', 'Easy'), ('Geometry', 'Medium')]
difcheck 
[('Geometry', 'Medium'), ('Math', 'Easy'), ('Graphs', 'Easy')]
availablelist 
[('Geometry', 'Medium'), ('Graphs', 'Easy')]
difcheck 
[('Graphs', 'Easy'), ('Geometry', 'Medium')]
availablelist 
[('Graphs', 'Easy')]
difcheck 
[('Graphs', 'Easy')]

我想要的输出是

availablelist 
[("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy")]
difcheck 
[("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy")]
availablelist 
[("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy"), ("Graphs", "Easy")]
difcheck 
[("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy"), ("Graphs", "Easy")]
availablelist 
 [("Geometry", "Medium"), ("Math", "Easy"), ("Graphs", "Easy"), ("Fun", "aasd")]
difcheck 
[("Geometry", "Medium"), ("Math", "Easy"), ("Graphs", "Easy"), ("Fun", "aasd")]
availablelist 
[("Math", "Easy"), ("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium")]
difcheck 
[("Math", "Easy"), ("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium")]

在required_topics或required_dif中的元素不在availablelist中的元组中的实例中,它不会被添加到difcheck。在这种情况下,我们有一个完美的匹配,所以一切都添加。

这个问题可能非常明显,但我已经变得朦胧而无法看到它。

1 个答案:

答案 0 :(得分:1)

这部分向后看

required_dif.remove(availablelist[x][0])
required_topics.remove(availablelist[x][1])

我认为应该是

required_dif.remove(availablelist[x][1])
required_topics.remove(availablelist[x][0])

此外,您的列表越来越小的原因是因为您在列表的每个循环中都有一个追加和两个删除。

 availablelist.append(availablelist[0])  # Add 1 item          
 answerlist.append(len(difcheck))
 del availablelist[0]                    # Delete 1 item
 print("availablelist ")
 print(availablelist)
 print("difcheck ")
 print(difcheck) 
 z = z + 1 
 del availablelist[0]                    # Delete another item