【问题标题】:My Python for loop is giving the result None我的 Python for 循环给出了结果 None
【发布时间】:2015-06-01 01:04:23
【问题描述】:

在下面的代码中,这个循环应该接受一个元组,比如说 (1,2,3),一个字典中的键,把它变成一个列表,[1,2,3],把 1 放在end, [1,2,3,1] 并且对于每个键,将此新列表添加到名为 new_training_data 的更长列表中。

这是我写的:

my_training_data={
    (1,2,3,4):[1,0,0],
    (1.2,1.8,3.2,3.8):[1,0,0],
    (1.1,1.9,3.1,3.9):[1,0,0],
    (4,3,2,1):[0,1,0],
    (3.8,3,2,1.8,1.2):[0,1,0],
    (3.9,3.1,1.9,1.1):[0,1,0]
}
def part_1(my_training_data):
   for key in sorted(my_training_data):
       new_training_data=[]
       new_training_data=new_training_data.append(list(key).extend([1]))
   return new_training_data

当我输入时

print part_1(my_training_data)

我得到了结果None

请帮忙!我已经为此苦苦挣扎了一段时间。

PS。我正在用 IPython 写这篇文章,已经为 64 位 Windows 下载了 Anaconda,版本 2.7。

【问题讨论】:

    标签: python loops for-loop append


    【解决方案1】:

    在 for 循环的每次运行中,您都在重新初始化 new_training_data,将其移出。此外,list(key).extend([1]) 的结果为 None (如返回 None ),因此列表将在最终迭代中仅包含一个 None 。

    所以,请执行以下操作:

    def part_1(my_training_data):
       new_training_data=[]
       for key in sorted(my_training_data):
           new_training_data.append(list(key) + [1])
       return new_training_data
    

    编辑:完成运行

    >>> my_training_data={
    ...     (1,2,3,4):[1,0,0],
    ...     (1.2,1.8,3.2,3.8):[1,0,0],
    ...     (1.1,1.9,3.1,3.9):[1,0,0],
    ...     (4,3,2,1):[0,1,0],
    ...     (3.8,3,2,1.8,1.2):[0,1,0],
    ...     (3.9,3.1,1.9,1.1):[0,1,0]
    ... }
    >>> def part_1(my_training_data):
    ...    new_training_data=[]
    ...    for key in sorted(my_training_data):
    ...        new_training_data.append(list(key) + [1])
    ...    return new_training_data
    ... 
    >>> part_1(my_training_data)
    [[1, 2, 3, 4, 1], [1.1, 1.9, 3.1, 3.9, 1], [1.2, 1.8, 3.2, 3.8, 1], [3.8, 3, 2, 1.8, 1.2, 1], [3.9, 3.1, 1.9, 1.1, 1], [4, 3, 2, 1, 1]]
    

    【讨论】:

    • 感谢您的快速回复!我尝试将 new_training_data=[] 从 for 循环中取出(即,正如您在此处所做的那样),但由于某种原因,在打印时,我收到一个错误:“NoneType”对象没有“附加”属性。知道为什么会这样吗?我没有看到对象类型发生了怎样的变化!
    • @eibb95 请注意他对extend 所做的更改,这仍然会给您带来麻烦。
    • 啊,没关系,我以某种方式错误地复制了您的代码 - 它可以工作,谢谢!
    【解决方案2】:

    如果我正确理解了您的问题,那么您显然正在寻找以下内容:

    def part_1(my_training_data):
        new_training_data = []
        for key in sorted(my_training_data):
            new_training_data.append(list(key)+[1])
        return new_training_data
    

    【讨论】:

    • 您能解释一下问题中的问题/为什么会这样吗?
    • 每次循环运行时,都会将 new_training_data 变量声明为空列表。您要附加到的变量必须在循环之外。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多