【问题标题】:List append() in for loop [duplicate]在 for 循环中列出 append() [重复]
【发布时间】:2017-05-18 02:16:25
【问题描述】:

在 Python 中,尝试使用循环对列表执行最基本的附加功能: 不知道我在这里缺少什么:

a=[]
for i in range(5):    
    a=a.append(i)
a

返回: 'NoneType' object has no attribute 'append'

【问题讨论】:

  • 不是a=append(i)。只需a.append(i)
  • 还有另一个骗子(可能不太规范,但对这个特定问题更有帮助:stackoverflow.com/q/31734042/748858
  • 根据您真正想做的事情,您还可以使用列表理解创建相同的列表。 a = [x for x in range(5)]

标签: python for-loop append


【解决方案1】:

list.append 函数不返回任何值(但None),它只是将值添加到您用来调用该方法的列表中。

在第一轮循环中,您将分配None(因为append 的不返回)给a,然后在第二轮它会尝试调用a.append,因为a is None 它会引发您看到的异常

您只需将其更改为:

a=[]
for i in range(5):    
    a.append(i)
print(a)
# [0, 1, 2, 3, 4]

list.append 是所谓的变异或破坏性方法,即它会将先前的对象破坏或变异为新对象(或新状态)。

如果您想基于一个列表创建一个新列表而不破坏或改变它,您可以执行以下操作:

a=['a', 'b', 'c']
result = a + ['d']

print result
# ['a', 'b', 'c', 'd']

print a
# ['a', 'b', 'c']

仅作为推论,您可以通过执行以下操作来模仿 append 方法:

a=['a', 'b', 'c']
a = a + ['d']

print a
# ['a', 'b', 'c', 'd']

【讨论】:

  • 确实返回一个值。它返回None
  • a.append([i for i in range(5)])
【解决方案2】:

您不需要分配,list.append(x) 将始终将x 附加到a,因此无需重新定义a

a = []
for i in range(5):    
    a.append(i)
print(a)

就是你所需要的。这是因为lists 是可变的。

另见docs on data structures

【讨论】:

    【解决方案3】:

    无需重新分配。

    a=[]
    for i in range(5):    
        a.append(i)
    a
    

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 2021-09-10
      • 2016-08-28
      • 2020-08-11
      • 2021-01-12
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多