python“int”对象没有“sort”属性

2024-04-24 20:14:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 对象命令列表for属性顺序错误数字
3条回答

最毒的解药是

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

有三个问题:

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

在这里,您在列表中使用.sort(),然后尝试print返回值。但是.sort()在中对列表进行排序,然后返回None。所以这一行将始终打印None。要打印已排序的列表,可以使用sorted()函数返回已排序的列表,准备传递给print

print sorted(square_list)

也可以在打印前对列表进行排序:

square_list.sort()
print square_list

你必须了解循环。

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

相关问题 更多 >