返回列表结果为无

Posted

技术标签:

【中文标题】返回列表结果为无【英文标题】:Returning list results in none 【发布时间】:2016-08-23 16:46:09 【问题描述】:

所以我正在开发一个小程序,通过 GUI 从给定文件中删除重复项,以学习如何使用 Python 制作 GUI。

我编写了一个方法,它应该采用string,将其转换为list,从list 中删除重复项,它实际上就是这样做的。 当我想return 结果时会出现问题,因为如果我print() 返回值,它只会导致None 被打印。但是,如果我在方法中print() 我想要return 的值,它会打印出正确的列表。

这个类看起来像这样:

#Class that removes the duplicates
class list_cleaner():
    def __init__(self):
        self.result_list = []

    def clean(self,input_string, seperator, target):
        #takes a string and a seperator, and splits the string at the seperator. 
        working_list = self.make_list_from_string(input_string,seperator)

        #identify duplicates, put them in the duplicate_list and remove them from working_list 
        duplicate_list = []
        for entry in working_list:
            instances = 0
            for x in working_list:
                if entry == x:
                    instances =  instances + 1
            if instances > 1:
                #save the found duplicate
                duplicate_list.append(entry)
                #remove the duplicate from working list
                working_list = list(filter((entry).__ne__, working_list))

        self.result_list = working_list + duplicate_list 
        print(self.result_list) #Prints the result list
        return self.result_list

主函数如下所示(注意:duplicate_remover 是 list_cleaner 的门面):

if __name__ == "__main__":
    remover = duplicate_remover()
    x = remover.remove_duplicates("ABC,ABC,ABC,DBA;DBA;DBA,ahahahaha", ",")
    print(x) #Prints none. 

TL;DR:

我有一个方法f,它返回listl,它是C 类的一个属性。

如果 i print() l 作为 f 的一部分,则正在打印 l 的值。

如果我返回l 并将其存储在f 范围之外的变量中,然后print() 这个变量将打印None

提前致谢!

编辑 1:

请求了duplicate_remover 代码。 看起来是这样的:

class duplicate_remover():
    def remove_duplicates(self,input_string,seperator):
        my_list_cleaner = list_cleaner()
        my_list_cleaner.clean( input_string = input_string, seperator = seperator)

【问题讨论】:

看起来duplicate_remover 是罪魁祸首。 我现在将发布duplicate_remover :) (尝试将其添加到此评论但格式化) 请将其编辑到您的问题中。 【参考方案1】:

remove_duplicates忘记返回my_list_cleaner.clean(...)的返回值,导致返回默认值None

【讨论】:

我不敢相信这是答案...非常感谢!我现在就去给自己挖个坑……

以上是关于返回列表结果为无的主要内容,如果未能解决你的问题,请参考以下文章

python 迭代值列表,应用函数并将结果作为列表返回

当 XPath 验证器返回正确结果时,为啥 XmlNode.SelectNodes 返回空列表?

GroupJoin with list返回多个结果,而不是按结果附加列表

核心数据:分组和计数结果返回空列表

将存储过程中选择查询的结果返回到列表

JPA 查询未在列表中返回更新的结果