【问题标题】:python 'int' object has no attribute 'sort'python 'int' 对象没有属性 'sort'
【发布时间】:2015-04-25 08:00:09
【问题描述】:

嘿,我是 Python 新手,我想完成这个练习,但我收到以下错误:'int' object has no attribute 'sort'。 我必须使用 for 循环从一个数字列表中取出并使其全部为正方形,然后按排序将它们一一打印出来。 我是否错误地使用了 sort 命令?或者它甚至不适用于数字?我是否必须使用 .append() 命令将它们全部打印出来? 所以这是到目前为止我想要的代码:

start_list = [5, 3, 1, 2, 4]
square_list = []
for square_list in start_list:
    square_list ** 2
print square_list.sort()

【问题讨论】:

  • 如果打印 square_list 会发生什么?
  • 你的意思是如果我删除 sort() 命令并像那样打印它?然后它只打印出 4
  • 没错!这是 start_list 中的最后一个值。请参阅 mfitzp 的回答,了解这是如何发生的。

标签: python sorting for-loop perfect-square


【解决方案1】:

存在三个问题:

  1. 您在 for 循环中从 start_list 分配 square_list
  2. 您没有将结果附加到列表中(由于上述原因,这无论如何都会失败)。

最终结果是您的square_list 不是列表,因此无法排序。

比较以下代码:

start_list = [5, 3, 1, 2, 4]
square_list = []
for item in start_list:
    square_list.append(item ** 2)

这里我们遍历列表,为每个循环获取一个item。然后我们将其平方(使用** 2),然后将其附加到square_list

  1. 打印语句也有问题:print square_list.sort()

这里你在列表中使用.sort(),然后尝试print 返回值。但是.sort() 对列表进行就地 排序,然后返回None。所以这条线总是会打印None。要打印排序列表,您可以使用返回排序列表的sorted() 函数,准备好传递给print

print sorted(square_list)

或者您可以在打印之前对列表进行排序:

square_list.sort()
print square_list

【讨论】:

    【解决方案2】:

    最pythonic的解决方案是

    start_list = [5, 3, 1, 2, 4]
    square_list = [ i ** 2 for i in start_list ]
    print(sorted(square_list))
    

    或oneliner:

    print(sorted(i ** 2 for i in [5, 3, 1, 2, 4]))
    

    让我们剖析你的代码:

    # here you create an empty list and assign it to
    # square list
    square_list = []
    
    # yet here you will assign each item of start_list
    # to the name square list one by one
    for square_list in start_list:
        # then you square that number, but it is not stored anywhere
        square_list ** 2
    
    # at this point, square_list contains the last element
    # of start_list, that is the integer number 4. It does 
    # not, understandably, have the `.sort` method.
    print square_list.sort()
    

    直接的解决方法是:

    start_list = [ 5, 3, 1, 2, 4 ]
    square_list = []
    for element in start_list:
        square_list.append(element ** 2)
    square_list.sort()  # note that printing this would say "None"
    print square_list
    

    【讨论】:

      【解决方案3】:

      你必须了解 for 循环。

      for square_list in start_list:
          square_list ** 2
      

      square_list 在此示例中不引用您创建的空列表。它用作从列表中提取值的模棱两可的变量。因此,这只是每次迭代期间列表中的每个值,它们都是整数,因为这就是您的列表中的内容。

      其次,您实际上并没有将正方形添加到列表中,您只是在计算正方形而不对它们做任何事情。最后,sort 方法不返回任何内容,它只是更改列表而不返回值。使用不改变列表但返回新值的等效排序方法。我想你最好用一些代码来理解。

      start_list = [5, 3, 1, 2, 4]
      square_list = []
      
      # for loop number is ambiguous variable
      
      for number in start_list: 
          square = number ** 2 # calculate square to add later
          square_list.append(square) # add the calculation
      
      print sorted(square_list) # print sorted version
      

      【讨论】:

      • 非常感谢!!希望你能升职,睡个好觉!!
      • 嗯,我现在才上高中,所以升职不是迫在眉睫,但我会睡个好觉。
      【解决方案4】:

      循环后你的square_list 绑定到整数[准确地说,它的值是4]。

      要创建平方数列表,您可以使用列表推导:

      square_list = [i**2 for i in start_list]

      然后排序:

      square_list.sort()

      【讨论】:

      • 他是初学者,我不认为这里有列表推导的地方。
      猜你喜欢
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2014-03-30
      • 2020-05-25
      • 2016-07-31
      相关资源
      最近更新 更多