我目前正在使用python编程,我创建了一个从用户输入列表的方法,而不知道他是多维还是一维。我该如何检查? 样品:
def __init__(self,target):
for i in range(len(target[0])):
w[i]=np.random.rand(len(example[0])+1)
target是列表。问题是target [0]可能是int。
答案 0 :(得分:13)
我想你只想要isinstance?
使用示例:
>>> a = [1, 2, 3, 4]
>>> isinstance(a, list)
True
>>> isinstance(a[0], list)
False
>>> isinstance(a[0], int)
True
>>> b = [[1,2,3], [4, 5, 6], [7, 8, 9]]
>>> isinstance(b[0], list)
True
答案 1 :(得分:9)
根据评论,您无论如何都要将输入转换为numpy数组。由于np.array
已经处理了输入列表嵌套的深度,因此更容易找到该数组中的维数而不是嵌套列表中的维数。
特别是,数组具有shape
属性,该属性是每个维度上数组长度的元组,因此len(myarray.shape)
将告诉您维度的数量。例如,
>>> import numpy as np
>>> a = np.array([[1,2,3],[1,2,3]])
>>> len(a.shape)
2
答案 2 :(得分:7)
如果您想知道列表有多少维度,可以使用以下代码片段:
def test_dim(testlist, dim=0):
"""tests if testlist is a list and how many dimensions it has
returns -1 if it is no list at all, 0 if list is empty
and otherwise the dimensions of it"""
if isinstance(testlist, list):
if testlist == []:
return dim
dim = dim + 1
dim = test_dim(testlist[0], dim)
return dim
else:
if dim == 0:
return -1
else:
return dim
a=[]
print test_dim(a)
a=""
test_dim(a)
print test_dim(a)
a=["A"]
print test_dim(a)
a=["A", "B", "C"]
print test_dim(a)
a=[[1,2,3],[1,2,3]]
print test_dim(a)
a=[[[1,2,3],[4,5,6]], [[1,2,3],[4,5,6]], [[1,2,3],[4,5,6]]]
print test_dim(a)
答案 3 :(得分:0)
这是非常简化的解决方案。在大多数情况下,多维列表/数组/矩阵会在第一个索引中包含一个列表对象。话虽这么说,在python中,因为您不需要定义数据类型,所以如果您的列表看起来有些链接,则可能返回错误:[1,[2,3],4]。 -否则它应该适用于所有普通的多维列表。
def is2DList(matrix_list):
if isinstance(matrix_list[0], list):
return True
else:
return False
# list
list_1 = [1,2,3,4] # 1 x 4
list_2 = [ [1,2,3],[3,4,5] ] # 2 x 2
list_3 = [1, [2,3], 4]
print(is2DList(list_1)) # False
print(is2DList(list_2)) # True
print(is2DList(list_3)) # False - incorrect result