我正在尝试使用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
。我检查了几次括号并且它们是正确的。所以,我不知道出了什么问题。
简单地说,我想找到一个矢量和几个矢量之间的汉明距离,并将其保存在列表中"距离"以后再使用它。
谢谢
答案 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