我的Python for循环给出了结果None

时间:2015-03-27 16:07:18

标签: python loops for-loop append

在下面的代码中,这个循环应该取一个元组,比如说(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版。

2 个答案:

答案 0 :(得分:3)

您在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]]

答案 1 :(得分:1)

如果我理解你的问题,这就是你显然正在寻找的东西:

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