【问题标题】:Python program returning None Type array when append to the list [duplicate]Python程序在追加到列表时返回无类型数组[重复]
【发布时间】:2018-05-12 15:35:23
【问题描述】:

我的 python 程序有一个小问题。情况是我试图在我的数组中使用myarray.append(),但是在 python shell 中,当我在 python shell 中进行附加测试时,它会告诉我这一点:

>> l.append('1') # l is already defined

Traceback (most recent call last):

  File "<pyshell#1>", line 1, in <module>

    l.append('1')

AttributeError: 'NoneType' object has no attribute 'append'
>>

我对这个问题很困惑,但无论如何,我会让你看到代码:

l=[] #*
i=1
while True:
  if 3*i<1000:
    l.append(str(i)) #*
  else:
    break
  i+=1
l=l.sort()
print l

*我认为这是问题的主要因素

我可能只是发疯了而没有意识到,但如果你能帮忙,请帮忙。

附:当我在print l 上运行程序时,它只会输出None

【问题讨论】:

  • 您的代码无法按原样运行,这将导致无限循环 i+=1 在 while 之外...

标签: python arrays python-2.7 nonetype


【解决方案1】:

在 python 中,您可以使用list comprehension 填充如下列表

l = [str(i) for i in range(0, 1000)]
l > ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ..]

如果您在列表中使用sort,它会返回None,这是python 中的一个指示符,它会在适当的位置执行操作。所以要打印一个排序列表,这样做就足够了:

l.sort()
print(l)

【讨论】:

    【解决方案2】:

    你的问题出在

    l = l.sort()
    

    sort() 方法对列表进行就地排序;列表本身被重新排序,而不是返回一个新列表。该方法返回 None,然后您将其分配给 l。所以你只需要删除分配。

    另一种方法是使用

    l = sorted(l)
    

    这实际上会复制原始列表,其中的元素按排序顺序排列。

    【讨论】:

    • 除非从未达到此语句,至少在呈现的代码中是这样。
    • @SimonBowly 所以有办法不让它重复吗?
    • @ScottHunter:在呈现的代码中,它是一个无限循环;我怀疑在原始代码中或在糟糕的复制/粘贴作业中存在严重的缩进错误。
    • @ShadowRanger 这是糟糕的复制/粘贴工作......对不起
    • @Supercoolbat 我以为这只是一个复制粘贴问题,否则你会问为什么程序永远不会终止!您的i=i+1 语句需要在while 循环内但在if/else 之外。您将其缩进了 2 个空格。
    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 2020-08-08
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2023-03-11
    相关资源
    最近更新 更多