1

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

4 回答 4

3

存在三个问题:

  1. 您正在从start_listforsquare_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语句中还有一个问题:print square_list.sort()

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

print sorted(square_list)

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

square_list.sort()
print square_list
于 2015-02-23T20:56:52.533 回答
1

最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
于 2015-02-23T20:56:03.880 回答
0

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

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

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

然后对其进行排序:

square_list.sort()

于 2015-02-23T20:56:15.710 回答
0

您必须了解 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
于 2015-02-23T21:05:12.160 回答