我无法在Python中添加一些元素

时间:2014-03-18 13:40:58

标签: python loops infinite

start_list = [5, 3, 1, 2, 4]
square_list = []
for x in start_list:
    square_list.append(start_list.append(x**2))
    square_list.sort()
    print square_list

我想在start_list中添加square_list个元素及其sqrt。但它将是无限循环。 (我想,它发生在(start_list.append(x**2))我该如何解决?

5 个答案:

答案 0 :(得分:5)

迭代时不要改变列表。改为使用列表理解,就像这样

start_list = [5, 3, 1, 2, 4]
print [x**2 for x in start_list]
# [25, 9, 1, 4, 16]

实际上,你正在做这样的事情

start_list = [5, 3, 1, 2, 4]
for item in start_list:
    start_list.append(item ** 2)

让我们放一些print语句,并了解执行代码时会发生什么

start_list = [5, 3, 1, 2, 4]
for item in start_list:
    start_list.append(item ** 2)
    print len(start_list), start_list
    if len(start_list) == 15:
        break

<强>输出

6 [5, 3, 1, 2, 4, 25]
7 [5, 3, 1, 2, 4, 25, 9]
8 [5, 3, 1, 2, 4, 25, 9, 1]
9 [5, 3, 1, 2, 4, 25, 9, 1, 4]
10 [5, 3, 1, 2, 4, 25, 9, 1, 4, 16]
11 [5, 3, 1, 2, 4, 25, 9, 1, 4, 16, 625]
12 [5, 3, 1, 2, 4, 25, 9, 1, 4, 16, 625, 81]
13 [5, 3, 1, 2, 4, 25, 9, 1, 4, 16, 625, 81, 1]
14 [5, 3, 1, 2, 4, 25, 9, 1, 4, 16, 625, 81, 1, 16]
15 [5, 3, 1, 2, 4, 25, 9, 1, 4, 16, 625, 81, 1, 16, 256]

通过附加到每次迭代,您基本上都在增加列表。这就是你的程序无限循环的原因。

答案 1 :(得分:0)

.append(start_list.append(x**2))调用,如果我理解你的目的,实际上不应该是append(append())而只是查找。由于您要对列表项进行迭代,因此x值是您要附加到square_list的值。

for x in start_list:
    square_list.append(x**2)

然而,列表理解技术可能是“更好”的技术。回答,因为它是Pythonic和优秀的。

答案 2 :(得分:0)

另一个问题是,我认为.append()会返回None,所以当你这样做时,你并没有真正向square_list追加任何内容:

square_list.append(start_list.append(x**2))

除了她的答案之外,我们认为它可能有助于解决您的问题。

答案 3 :(得分:0)

start_list.append(x**2)的返回值为None,因此square_list中的元素将为[None, None, None, ...],并且因为您在每次迭代期间将项附加到start_list,所以它会得到一个无限循环。

我认为你想要做的就是这样:

l = [5, 3, 1, 2, 4]
l += [x**2 for x in l]
l.sort()
print(l)

答案 4 :(得分:0)

# without changing the code much
start_list = [5, 3, 1, 2, 4]
square_list = []
for x in start_list.copy():
    square_list.append(x**2) # appending returns a None value rather the appended value 
    start_list.append(x ** 2) # not sure why you want to append the root into the start list
    square_list.sort() # sort square_list
    print square_list

# better way of doing it
start_list [5, 3, 1, 2, 4]
square_list = [ x ** 2 for x in start_list]
print square_list

如果你想打印它就像在for循环中你可以做[(square_list.sort(), print(square_list[0: x+1])) for x in range(len(square_list))]但我认为它只适用于python 3,因为print是一个函数而不是像python 2中的语句(至于我知道。)