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)
)我该如何解决?
答案 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中的语句(至于我知道。)