我有一个列表,有时它是嵌套的,有时不是。基于是否嵌套,其继续过程不同。如何检查此列表是否嵌套?应输出True
或False
。
示例:
[1,2,3]
--> False
[[1],[2],[3]]
--> True
isinstance
和 生成器表达式 与 any
结合使用。这将检查原始外部列表中的 list
对象的实例。In [11]: a = [1, 2, 3]
In [12]: b = [[1], [2], [3]]
In [13]: any(isinstance(i, list) for i in a)
Out[13]: False
In [14]: any(isinstance(i, list) for i in b)
Out[14]: True
注意,any
函数在遍历到一个有效元素时(如列表),就会立即返回True
,因此您不必不必无谓地遍历整个外部列表。
def is_nested_list(l):
try:
next(x for x in l if isinstance(x,list))
except StopIteration:
return False
return True
def get_dict_values(data_structure):
''' Get a list with the values of a dictionary items '''
[*values] = data_structure.values()
return values
def get_list_values(data_structure, temp):
''' Transform a nested list into a one depth level list '''
for item in data_structure:
if type(item) == list:
temp = ReturnDataValues.get_list_values(item, temp)
elif type(item) == dict:
dict_values = ReturnDataValues.get_dict_values(item)
temp = ReturnDataValues.get_list_values(dict_values, temp)
else:
temp.append(item)
return temp
def get_object_values(data_structure, result):
''' Get all the values of the elements of an object at all its depth levels '''
data_type = type(data_structure)
if data_type == dict:
values = ReturnDataValues.get_dict_values(data_structure)
ReturnDataValues.get_object_values(values, result)
if data_type == list:
ReturnDataValues.get_list_values(data_structure, result)
return result
**nested_list** = ['a', 'b', ['c', 'd'], 'e', ['g', 'h', ['i', 'j', ['k', 'l']]] ]
print(get_list_values(nested_list))
输出:
['a', 'b', 'c', 'd', 'e', 'g', 'h', 'i', 'j', 'k', 'l']