【问题标题】:Python code not appending 'Free Period' when I want it to当我想要它时,Python代码没有附加“免费期”
【发布时间】:2014-06-18 15:40:56
【问题描述】:
list1 = []

elective = []
prereq = []

someNumber = 1

dict2 = {
1: SEM2period1, 2: SEM2period2,
2: SEM2period3, 4: SEM2period4,
5: SEM2period5, 6: SEM2period6,
7: SEM2period7, 8: SEM2period8
}


for key, dlist in dict2.items():
    if not dlist:
        list1.append("Free Period")
        someNumber += 1
        continue
    for item in dlist:
        if item in list1:
            continue
        elif item in elective:
            elecStorage.append(item)
        elif item in prereq:
            list1.append(item)
            someNumber += 1
            break
        if someNumber > len(list1):
            for index in elecStorage:
                if index in list1:
                    break
                else:
                    list1.append(index)
                    someNumber += 1
                    elecStorage[:] = []
                    break

注意:Electives 和 Prereq 都包含诸如“Calculus 1”(用于 prereq)或“Astronomy”(用于选修课)之类的字符串。dict2 中的变量是包含类(如课堂)名称的列表,这些名称之前由函数。

以“for key, dlist in dict2.items()”开头的 sn-p 应该做的是搜索第一个列表的元素,首先检查是否有列表,如果没有然后将“免费期”附加到列表中。然后它应该检查列表中的任何元素是否存在于 prereq 中,最后如果不存在,则从选修课中附加一些内容。 (因为如果它超过了第一个条件,可以肯定地假设至少有一个选修课。)然后循环返回并对下一个元素列表执行相同的操作。

问题是,除非所有列表都不包含任何内容,否则它不会附加“免费期”,我不知道为什么。

想法?

【问题讨论】:

  • 没有列表的时候,SEM2periodX具体是什么类型的对象。是“无”之类的吗?
  • 不会,是的。
  • 你能验证那个 SEM 吗?在至少有一个非空列表的情况下,真的是 None,而不是像一个空列表? '[print x for x in dict2.values()]' 应该有助于调试。
  • 哎呀,它返回为 [],而不是 None。
  • 但即使它以 [] 的形式返回也没关系,对吗?

标签: python list dictionary append


【解决方案1】:

您的 SEM*period* 中的某些内容可能会返回一个空列表,而不是 None。对空列表 '[]' 的正确检查是 'if list1 == []' 或 'if len(list1) == 0'。

None 是占位符,表示不存在的对象。 [] 是一个有效的列表对象,它只是在列表中没有条目。 'if not foo' 只是检查 None,而不是空列表。

【讨论】:

    【解决方案2】:

    您应该验证 SEM2period 变量的内容,没有它们就很难诊断。我没有遵循您的其余逻辑,但这实际上只是您感兴趣的循环中的第一个块,是吗?您可能有一个包含空列表的列表,也许?那会打乱你的逻辑:

    d2 = {1:['elec'], 2:[]}
    
    for key, dlist in d2.items():
        if not dlist:
            print 'empty!'
        else:
            print dlist
    

    给你

    ['elec']
    empty!
    

    但是

    d2 = {1:['elec'], 2:[[]]}
    
    for key, dlist in d2.items():
        if not dlist:
            print 'empty!'
        else:
            print dlist
    

    给你

    ['elec']
    [[]]
    

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 2013-07-29
      • 1970-01-01
      • 2016-08-26
      • 2012-11-09
      • 1970-01-01
      • 2021-11-11
      • 2019-11-17
      • 1970-01-01
      相关资源
      最近更新 更多