无法将输出转换为列表

Unable to convert output to list

如何创建一个接受非负整数和字符串列表的函数,return一个没有字符串的新列表?

例如。 filter_list([1, 2, "a", "b"])[1, 2]

问题:无法将输出转换为列表

def filter_list(a):
    mylist=[]
    if type(a)==list:
        for i in a:
            if type(i)==int:
                output=print(i)
        mylist+=output
        return mylist

我做错了什么?

您可以使用仅包含 int 类型的列表元素的列表理解。

def filter_list(lis):
    return [i for i in lis if type(i) == int]

print(filter_list([1, 2, "a", "b"]))

代码输出:

[1, 2]

这有帮助吗:

>>> def filter_list(lst):
    return [item for item in lst if type(item) is not str]

>>> filter_list([1, 2, 'a', 'b'])
[1, 2]
>>> 

使用isinstance and list comprehension:

def filter_list(lst):
    return [i for i in lst if isinstance(i, int)]

使用filter函数本身:

>>> list(filter(lambda x: isinstance(x, int), [1, 2, "a", "b"]))
[1, 2]

您的代码存在问题,而不是打印并使用 +=(用于连接两个列表,而不是一个 list 和一个 int)添加到您的列表,您应该像这样附加元素:

for i in a:
    if type(i) == int:
        mylist.append(i)

您犯的错误是您将 print() 返回的值分配给 output(即 None),然后您添加了 None 类型对象到 list 对象,这是无效操作。您可以通过执行以下操作来修复您的代码:

def filter_list(a):
    mylist=[]
    if type(a)==list:
        for i in a:
            if type(i)==int:
                print(i)
                mylist+=[i]
        return mylist

然而,这可以使用列表理解以更漂亮的方式完成!
列表理解是一种使用相对较短的语法创建新列表的方法。

[elem for elem in _list if type(elem) is int]

您可以使用如下过滤方法:

def filter_list(a):
    return list(filter(lambda x: type(x) == int, a))

print(filter_list([1, 2, "a", "b"]))

输出:

[1, 2]

您的代码已修复:

def filter_list(a):
    mylist=[]
    for i in a:
        if type(i)==int:
            mylist.append(i)
    return mylist

def filter_list1(a):
    return list(filter(lambda x: type(x) == int, a))

print(filter_list([1, 2, "a", "b"]), filter_list1([1, 2, "a", "b"]))

输出:

[1, 2] [1, 2]