我有一个清单:
list1=[]
列表的长度是未确定的,所以我试图将对象附加到list1的末尾,如下所示:
for i in range(0, n):
    list1=list1.append([i])
但是我的输出一直给出这个错误:AttributeError:'NoneType'对象没有属性'append'
这是因为list1作为空列表开始吗?我该如何解决这个错误?
我对导致这种情况的思维过程感兴趣.对我来说,一个相对新手,似乎阻碍了,因为它阻止了列表处理的"链接"(例如mylist.reverse().append('a string')[:someLimit]).我想可能是"那些人的力量"决定列表理解是一个更好的范例(一个有效的观点),所以不想鼓励其他方法 - 但是这似乎有悖常理,以防止一种直观的方法,即使更好存在替代品.
请注意,我不是在抱怨(我敢肯定有是一个合理的理由,我在它是什么只是感兴趣!),也不是寻找一个解决方案(意见在这里非常具有启发性) -只是寻找一些情况下,并深入理解语言的设计过程.
Stack Overflow 上有很多关于这个一般主题的问答,但它们要么质量很差(通常是初学者的调试问题暗示的),要么以其他方式错过了目标(通常是不够通用)。至少有两种极其常见的方法会使幼稚的代码出错,初学者从关于循环的规范中获益更多,而不是从将问题作为拼写错误或关于打印所需内容的规范中获益。所以这是我尝试将所有相关信息放在同一个地方。
假设我有一些简单的代码,可以对一个值进行计算x并将其分配给y:
y = x + 1
# Or it could be in a function:
def calc_y(an_x):
    return an_x + 1
现在我想重复计算 的许多可能值x。我知道for如果我已经有要使用的值列表(或其他序列),我可以使用循环:
xs = [1, 3, 5]
for x in xs:
    y = x + 1
while或者,如果有其他逻辑来计算值序列,我可以使用循环x:
def next_collatz(value):
    if value % 2 == 0:
        return value // 2
    else:
        return 3 * value + 1
def collatz_from_19():
    x = 19
    while x != 1:
        x …