将列表编号值替换为其他值?

时间:2013-06-06 14:56:44

标签: python python-3.x

我有这段代码

start_list = [5, 3, 1, 2, 4]
square_list = []

for number in start_list:
    number = number**2
    #I bet something should be added here but 
    #I have no idea what that would be
square_list.append(start_list[0])
square_list.append(start_list[1])
square_list.append(start_list[2])
square_list.append(start_list[3])
square_list.append(start_list[4])
square_list.sort()

print square_list

我实际上想要创建一个新列表(square_list),其中包含start_list的平方和排序数。这是我在python上的第一天,所以要温柔!

3 个答案:

答案 0 :(得分:4)

在列表上构建生成结果的生成器,并将其提供给sorted以获取基于升序值的列表,例如:

start_list = [5, 3, 1, 2, 4]

square_list = sorted(n**2 for n in start_list)
# [1, 4, 9, 16, 25]

答案 1 :(得分:1)

据我了解在你的情况下它应该是这样的:

start_list = [5, 3, 1, 2, 4]
square_list = []

for number in start_list:
    number = number**2
    square_list.append(number)
square_list.sort()

但您可以使用其他方法

square_list = sorted(number**2 for number in start_list)

square_list = [number**2 for number in start_list]
square_list.sort()

答案 2 :(得分:0)

Jon Clements的生成器方法是做到这一点的最好和最pythonic方式,但是我认为,因为你是初学者,所以值得理解for循环方式。你已经清楚地理解了你需要的元素,你只需要以一种新的方式将它们连接在一起。

start_list = [5, 3, 1, 2, 4]
square_list = []

for number in start_list:

到目前为止一切都很好,但您希望将这些内容添加到square_list而不是number = number**2。您的代码只是修改临时变量,而不是更改任何内容,为number分配新值不会更改start_list。你想要下一个:

  square_list.append(number**2)

然后你只需按照你已经完成的方式进行排序和打印

square_list.sort()
print(square_list)

(没有括号的print会起作用,但它会被Python 3删除,所以现在最好习惯使用括号。)