python' int'对象没有属性' sort'

时间:2015-02-23 20:52:46

标签: python sorting for-loop perfect-square

嘿,我是Python的新手,我想完成这个练习但是我得到以下错误:'int'对象没有属性'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()

4 个答案:

答案 0 :(得分:3)

有三个问题:

  1. 您在for循环中通过start_list分配了square_list
  2. 您没有将结果附加到列表中(由于上述情况,这无论如何都会失败)。
  3. 最终结果是您的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()
    2. 您在列表中使用.sort(),然后尝试print返回的值。但.sort()对列表进行排序,然后返回None。因此,此行将始终打印None。要打印已排序的列表,您可以使用sorted()函数返回已排序的列表,准备传递给print

      print sorted(square_list)
      

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

      square_list.sort()
      print square_list
      

答案 1 :(得分:1)

最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

答案 2 :(得分:0)

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

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

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

然后对其进行排序:

square_list.sort()

答案 3 :(得分:0)

你必须了解循环。

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