我有一个python数组数据结构,如[[v],[v]],v是一个大小为2的数组或另一个[[v],[v]]数据类型。你可以看到下面的真实数据:
ex1:
list: [[[1, '1.0.1'], [1, '2.0.1']], [1, '3.0.11']]
ex2:
list: [[[[1, '1.0.1'], [1, '2.0.1']], [1, '3.0.11']], [1, '4.0.11']]
现在我的问题是我应该首先从左到右获取元素[1,'1.0.1']然后是[1,'2.0.1'],依此类推。并注意数组的大小各不相同。
我怎样才能做到这一点?
答案 0 :(得分:2)
一种可能的解决方案是展平列表:
def flatten(lst):
if not lst:
return []
elif not isinstance(lst, list):
return [lst]
else:
return flatten(lst[0]) + flatten(lst[1:])
这将允许您按顺序遍历列表:
ls1 = [[[[1, '1.0.1'], [1, '2.0.1']], [1, '3.0.11']], [1, '4.0.11']]
flatten(ls1)
=> [1, '1.0.1', 1, '2.0.1', 1, '3.0.11', 1, '4.0.11']
或者,使用发电机:
def flatten(lst):
if not lst:
return
elif not isinstance(lst, list):
yield lst
else:
for e in flatten(lst[0]):
yield e
for e in flatten(lst[1:]):
yield e
list(flatten(ls1))
=> [1, '1.0.1', 1, '2.0.1', 1, '3.0.11', 1, '4.0.11']
答案 1 :(得分:1)
这是一个做你想做的迭代器:
def iterate(xs):
try:
if isinstance(xs[1],str):
yield xs
return
except IndexError:
pass
for x in xs:
yield from iterate(x)
使用示例:
>>> list(iterate([[[[1, '1.0.1'], [1, '2.0.1']], [1, '3.0.11']], [1, '4.0.11']]))
[[1, '1.0.1'], [1, '2.0.1'], [1, '3.0.11'], [1, '4.0.11']]
答案 2 :(得分:0)
这个答案可能遗漏了一些明显的东西,所以我提前道歉......
但是你的数据结构似乎比它需要的要复杂得多?
将
v = [(1, '1.0.1'), (1, '2.0.1'), (1, '3.0.11')]
v.append((1, '4.0.11'))
print v
做你想做的事吗?