【问题标题】:Python 3.X: Implement returnGreater() function using a list of integers and a valuePython 3.X:使用整数列表和值实现 returnGreater() 函数
【发布时间】:2018-03-05 20:58:08
【问题描述】:

函数必须返回一个列表,该列表由大于函数中第二个数字的数字组成 它在运行时必须能够执行以下操作:

returnGreater([1,2,3,4,5], 3)
[4,5]

returnGreater([-8,2,-4,1,3,-5],3)
 []

这就是我所拥有的(我已经经历了几次迭代),尽管我在尝试在 int 和列表之间使用 ">" 符号时遇到类型错误:

def returnGreater (x,y):
    "x:list(int) , return:list(int)"
    #greater: int
    greater = []
    for y in x:
        #x: int
        if x > y:
            x = greater
    return greater

【问题讨论】:

  • 你有什么问题?你似乎理解了这个错误。如果x 是一个列表,if x > y: 就没有意义。
  • 这可以用filter轻松完成。
  • 我必须在没有过滤器的情况下这样做

标签: python-3.x list for-loop if-statement integer


【解决方案1】:

您在代码中将名称 y 用于两个不同的事物。它既是一个参数(要比较的数字)又是循环变量。您应该为其中一个使用不同的名称。

我强烈建议选择有意义的名称,因为这样可以更清楚地了解每个变量的含义,并降低您将相同名称用于两个不同事物的可能性.例如,我是这样命名变量的(去掉xy):

def returnGreater(list_of_numbers, threshold):
    greater = []
    for item in list_of_numbers:
        if item > threshold:
            greater.append(item)
    return greater

x = greater 行有另一个问题,它没有做任何有用的事情(它将对原始列表的引用替换为对空的 greater 列表的引用。您应该 appending 该项目您只是比较了greater 列表。

【讨论】:

    【解决方案2】:

    我推荐filter。轻松优雅的方式。

    def returnGreater(x, y):
        return list(filter(lambda a:a>y, x))
    

    这意味着,无论a是否大于y,都使用lambda过滤列表x中的每个元素a

    【讨论】:

      【解决方案3】:

      List Comprehensions

      def returnGreater(_list, value):
          return [x for x in _list if x > value]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-22
        • 1970-01-01
        • 1970-01-01
        • 2019-03-17
        • 2014-10-28
        • 2015-07-30
        • 2020-09-13
        • 1970-01-01
        相关资源
        最近更新 更多