python:使用linspace迭代非序列错误

时间:2013-11-26 13:34:46

标签: python for-loop sequence

我已经定义了自己的linspace命令来生成元素向量。然而,对这个向量的迭代失败了iteration over non sequence of type int

这是linspace

def linspace(a, b, n=100):
    if n < 2:
        return b
    diff = (float(b) - a)/(n - 1)
    # return [diff * i + a  for i in range(n)]
    linlist = []
    for i in range(n):
        linlist.append(diff * i + a)
    return linlist

这是我的for循环

n = (beginPos - endPos) / diff + 1
positions = linspace(beginPos, endPos, n)
for z in positions:
    ## Move to new position
    MoveTo(z)

我不知道为什么position变量不是有效序列。

编辑: 这是我对n的定义n是负数,需要计算为

n = abs((beginPos - endPos) / diff) + 1

1 个答案:

答案 0 :(得分:1)

如果n小于2,则linspace会返回b,而不是列表。

if n < 2:
    return b # <----

>>> def linspace(a, b, n=100):
...     if n < 2:
...         return b
...     diff = (float(b) - a)/(n - 1)
...     # return [diff * i + a  for i in range(n)]
...     linlist = []
...     for i in range(n):
...         linlist.append(diff * i + a)
...     return linlist
...
>>> linspace(1, 100, n=1)
100
>>> for z in linspace(1, 100, n=1): pass
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

调整return b以返回列表。