有没有办法存储结果而无需编写每个子列表名称? 每个数组中的数字只是我想要做的事情的例子。 提前谢谢。
_store = []
_arr4 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
_arr3 = [1, 2, 3, _arr4, 5, 6, 7, 8, 9]
_arr2 = [1, 2, 3, 4, 5, 6, _arr3, 8, 9]
_arr = [1, 2, 3, _arr2, 5, 6, 7, 8, 9]
for _value in _arr:
#If value is a list get it, go over that list and so on
if isinstance( _value, list ):
_store.append(_value)
_sub_list = _value
if isinstance( _sub_list, list ):
_store.append( _sub_list)
_sub_sub_list = _sub_list
if isinstance( _sub_sub_list, list ):
_store.append( _sub_list)
_sub_sub_sub_list = _sub_list
#and so on...
print _store
答案 0 :(得分:3)
使用递归:
a = [1,2,3]
b = [4,a,5]
c = [6,b,7]
def add_to(input, output):
for x in input:
if isinstance(x, list):
add_to(x, output)
else:
output.append(x)
result = []
add_to(c, result) # now result = [6, 4, 1, 2, 3, 5, 7]
使用生成器可以消除通过递归传递输出引用的非pythonicness:
def flatten(input):
for x in input:
if isinstance(x, list):
for y in flatten(x):
yield y
else:
yield x
result = list(flatten(c))
答案 1 :(得分:1)
为什么不将列表序列化为JSON?
import json
json.dumps(arr)
答案 2 :(得分:1)
您可以尝试使用递归:
arr4 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr3 = [1, 2, 3, arr4, 5, 6, 7, 8, 9]
arr2 = [1, 2, 3, 4, 5, 6, arr3, 8, 9]
arr = [1, 2, 3, arr2, 5, 6, 7, 8, 9]
def get_store(array):
store = []
for item in array:
if isinstance(item, list):
store.extend(get_store(item))
else:
store.append(item)
return store
print get_store(arr)
......输出:
[1, 2, 3, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 8, 9, 5, 6, 7, 8, 9]
基本上,每当你注意到你正在进行某些操作并不断地嵌套或重复它,但很难将它变成for循环时,这是一个很好的迹象,你可以尝试递归。