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

python 'int' object has no attribute 'sort'

嘿,我是 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()

最pythonic的解决方案是

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

或一线:

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

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

要创建平方数列表,您可以使用列表理解:

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

然后排序:

square_list.sort()

存在三个问题:

  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() 将列表排序 到位 然后 returns None。所以这一行将始终打印 None。要打印排序列表,您可以使用 sorted() 函数,其中 returns 排序列表,准备传递给 print:

print sorted(square_list)

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

square_list.sort()
print square_list

你必须了解for循环。

for square_list in start_list:
    square_list ** 2
本例中的

square_list 不是指您创建的空列表。它用作歧义变量以从列表中提取值。因此,这只是每次迭代期间列表中的每个值,它们都是整数,因为这就是您的列表中的内容。

其次,您实际上并没有将正方形附加到列表中,您只是在计算正方形而不对它们执行任何操作。最后,sort 方法没有 return 任何东西,它只是在没有 return 值的情况下更改列表。使用不改变列表但 return 一个新值的等效排序方法。我想你最好通过一些代码来理解。

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