如何迭代一个可以是整数和数组的变量?

时间:2018-02-25 11:44:08

标签: python arrays python-3.x numpy int

我想创建一个多功能函数接受整数和整数数组,例如:像delete这样的Numpy函数可以:

def foo(bar):   # type(foo) can be integer or an array of integers
    for i in bar:
        print(bar)

问题是当bar是单int时,这显然会引发TypeError: 'int' object is not iterable。我无法找到如何将bar转换为数组或任何可迭代的方式,以便在bar为数组时不会破坏代码。这该怎么做?

3 个答案:

答案 0 :(得分:2)

numpy.array有一个可选的ndmin参数。将此值设置为1可确保您正在迭代1d数组:

def foo(bar):   # type(bar) can be integer or an array of integers
    for i in np.array(bar, ndmin=1):
        print(i)

如果输入已经是数组,您还可以指定copy=False以避免生成副本。

注意我还修改了你的逻辑:你想在迭代时打印i而不是bar

答案 1 :(得分:1)

您可以使用numpy函数atleast_1datleast_2d来获得最少维度的输入:

>>> atleast_1d(3)
array([3])

>>> atleast_2d(3)
array([[3]])

>>> atleast_1d(randn(1,1))
array([[-0.97860085]])

答案 2 :(得分:0)

def foo(bar):
    if np.isscalar(bar):
        bar = np.array([bar])
    for i in bar:
        print(bar)

你可以试试这个