代码之家  ›  专栏  ›  技术社区  ›  mehardxx

我不能在Python中添加一些元素

  •  1
  • mehardxx  · 技术社区  · 12 年前
    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 的元素及其sqrt in square_list 。但这将是无限循环。(我想,这件事发生在 (start_list.append(x**2) )我该如何修复它?

    5 回复  |  直到 12 年前
        1
  •  5
  •   thefourtheye    12 年前

    不要在迭代列表时更改列表。请使用列表理解,如下所示

    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]
    

    你基本上是在每次迭代中通过附加列表来增加列表。这就是你的程序处于无限循环中的原因。

        2
  •  0
  •   user890167 user890167    12 年前

    这个 .append(start_list.append(x**2)) 如果我明白你的目的,电话应该不会 append(append()) 但只是一次查找。由于您正在迭代列表项 x value是要附加到square_list的值。

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

    然而,列表理解技巧可能是“正确”的答案,因为它是Python式的,非常优秀。

        3
  •  0
  •   Garth5689    12 年前

    另一个问题是我认为 .append() 回报 None ,所以你并没有在 square_list 当您这样做时:

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

    我想这可能有助于解决你的问题。

        4
  •  0
  •   zbtong    12 年前

    的返回值 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)
    
        5
  •  0
  •   user3234209    12 年前
    # 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))] 但我认为它只适用于python3,因为print是一个函数,而不是像python2那样的语句(据我所知)