【问题标题】:Printing out only odd values in a list in Python在 Python 中仅打印出列表中的奇数值
【发布时间】:2021-08-09 21:16:57
【问题描述】:

我刚开始使用 Python,我似乎无法解决这个练习题。

编写一个函数,接收一个集合并返回所有奇数元素的列表。您应该忽略集合中的任何非数字元素。

所需签名:defodd_numbers1(x):

例如,调用odd_numbers1([1,2,3,3,'3']) 将返回[1,3,3]

例如,调用odd_numbers1([False,True,3,5.0,7.5]) 将返回[True,3, 5.0]

这是我目前所拥有的,但是当我达到“3”时遇到错误。

    for i in x:
        if x %2 == 0 or type(x) != int:
            None
        else:
            print(x)
    
x = [1,2,3,3,'3']

odd_numbers1([1,2,3,3,'3'])```

【问题讨论】:

  • 检查type(x) 之前检查x%2。感谢short-circuiting,如果or 表达式的第一个条件返回True,则不会检查第二个条件,因此您不会尝试对字符串取模。
  • 另外,您可以使用pass 关键字代替None 来表示一个空块。

标签: python list loops for-loop


【解决方案1】:

if x %2 == 0 or type(x) != int 将从左到右进行评估。如果你有一个字符串,'3',那么它会在检查类型是否为 int 之前检查模数。你应该颠倒检查的顺序,也可以使用isinstance:if not isinstance(x, int) or x % 2 == 0

由于短路评估,这将起作用。

【讨论】:

    【解决方案2】:

    @chrispresso 是完全正确的,您在知道它是否为 int 之前检查模数,因此您需要反转该逻辑。就我个人而言,我会更改 if 语句。如果它是一个 int,并且不能被 2 整除,则打印。这对我来说看起来更干净,不需要 else 部分

    def odd_numbers1(x):
        for i in x:
            if isinstance(i, int) and i % 2 != 0:
                print(i)
    
    odd_numbers1([1, 2, 3, 3, '3'])
    

    输出

    1
    3
    3
    

    【讨论】:

      【解决方案3】:

      该问题涉及函数和返回,因此仅打印出列表可能不是正确答案。除了@Chrispresso 的回答,最简单的方法是这样的:

      def odd_numbers1(x):
          retval = []
          for i in x:
              if type(x) != int or x%2==0:
                  continue
              else:
                  retval.append(x)
          return retval
      

      列表推导是 Python 的一个很棒的特性,在这里也可以真正帮助您。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 2020-04-07
        • 1970-01-01
        • 2021-07-10
        相关资源
        最近更新 更多