【问题标题】:Unable to convert output to list无法将输出转换为列表
【发布时间】:2021-04-17 12:16:14
【问题描述】:

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

例如。 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

我做错了什么?

【问题讨论】:

  • 你在做output = print(i),这意味着你将None分配给output,因为print返回None。你应该只打印 i,然后写 mylist += [i]
  • @SanjeevanKhanduri ..我尝试了 print(i) ,然后 mylist+=i ......它现在没有给出 nonetype 错误,但也没有将输出转换为 list ..我做错了什么?
  • @ANURAGVERMA i 是整数,mylist 是列表,您不能使用 + 运算符添加列表和整数。您必须先将i 转换为列表。你可以通过在它周围添加方括号来做到这一点,[i]。然后你可以添加,mylist += [i]

标签: python python-3.x list integer


【解决方案1】:

您可以使用列表推导式,它仅包含具有 int 类型的列表元素。

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

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

代码输出:

[1, 2]

【讨论】:

    【解决方案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]
    >>> 
    

    【讨论】:

      【解决方案3】:

      使用isinstancelist comprehension

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

      【讨论】:

        【解决方案4】:

        使用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)
        

        【讨论】:

          【解决方案5】:

          您犯的错误是您将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]
          

          【讨论】:

            【解决方案6】:

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

            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]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多