我试图使用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
。我检查了几次括号,它们是正确的。所以我不知道是怎么回事。
简单地说,我想找出一个向量和几个向量之间的hamming距离,并将其保存在“距离”列表中,以便以后使用。
谢谢
发布于 2015-06-10 02:27:26
您的问题是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
而不是extend:Distance.append(hamming_distance(x_hat1,x[i]))
。
如果要使用隐式for循环(如第二种情况),则只需重新构造语句即可。
对I的引用应该在隐式循环之前:
Distance.extend(hamming_distance(x_hat1,x[i]) for i in range(1, 6))
这些选项中的任何一种都会奏效,这取决于你喜欢哪一种。(就我个人而言,隐式循环是我最喜欢的。这是一个单线线,更不用说比直通循环更多的琵琶了。)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
关于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]]
更多信息/示例:append.htm
展期:
通过对传递列表的每个元素使用list.append
扩展列表
示例:
>>myList = [1,2,3]
>>myList.extend(4)
>>myList
[1,2,3,4,5,6]
,但如果在单个元素上使用,则会引发错误
>>myList = [1,2,3]
>>myList.extend(4)
Type Error: 'int' object is not iterable
要扩展单个元素,需要创建一个1项列表:myList.extend([4])
更多信息/示例:extend.htm
关于差异的更多信息: append vs. extend
https://stackoverflow.com/questions/30744203
复制相似问题