迭代扩展以保存for循环的计算数据(python)

时间:2015-06-09 22:53:41

标签: python

我正在尝试使用extend来保存从循环迭代计算的数据。但是,我收到错误'numpy.int64' object is not iterable

x_hat1= commpy.channels.bsc(x[1],0.2)
Distance = []
for i in range(1, 6):
    Distance.extend(hamming_distance(x_hat1,x[i]))

所以,我尝试在扩展内部添加循环,如下所示

Distance.extend(value for i in range(1, 6), hamming_distance(x_hat1,x[i]))

但我收到错误Generator expression must be parenthesized if not sole argument。我检查了几次括号并且它们是正确的。所以,我不知道出了什么问题。

简单地说,我想找到一个矢量和几个矢量之间的汉明距离,并将其保存在列表中"距离"以后再使用它。

谢谢

1 个答案:

答案 0 :(得分:1)

您的问题是extend期望list作为参数。如果要使用普通for循环,请创建单个元素列表:

x_hat1= commpy.channels.bsc(x[1],0.2)
Distance = []
for i in range(1, 6):
    Distance.extend([hamming_distance(x_hat1,x[i])])

或使用append代替扩展:Distance.append(hamming_distance(x_hat1,x[i]))

如果您想使用隐式for循环,就像在第二种情况下一样,您只需要重新构建语句。

对i的引用应该在之前隐式循环:

Distance.extend(hamming_distance(x_hat1,x[i]) for i in range(1, 6))

这些选项中的任何一个都可以使用,取决于您喜欢的选项。 (就个人而言,隐式循环是我最喜欢的。它是一个单行,更不用说比直接循环更多的pythonic。)

+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++

有关list.extend与python中list.append函数的更多信息(因为这是您的主要困惑):

附加:

将单个对象追加到列表末尾

示例:

 >>myList = [1,2,3]
 >>myList.append(4)
 >>myList
 [1,2,3,4]

不应该用于添加整个元素列表

 >>myList = [1,2,3]
 >>myList.append([4,5,6])
 >>myList
 [1,2,3,[4,5,6]]

更多信息/示例: http://www.tutorialspoint.com/python/list_append.htm

扩展:

在传递列表的每个元素上使用list.append扩展列表

示例:

 >>myList = [1,2,3]
 >>myList.extend(4)
 >>myList
 [1,2,3,4,5,6]
如果在单个元素上使用

BUT 会抛出错误

 >>myList = [1,2,3]
 >>myList.extend(4)
 Type Error: 'int' object is not iterable

要扩展单个元素,您需要制作一个单项列表:myList.extend([4])

更多信息/示例: http://www.tutorialspoint.com/python/list_extend.htm

有关差异的更多内容: append vs. extend