可能重复:
Flatten (an irregular) list of lists in Python压扁在Python混合列表(含iterables和noniterables)
我怎么会去压扁Python中同时包含iterables和noniterables列表,例如作为[1,[2,3,4],5,[6]]?结果应该是[1,2,3,4,5,6],列表(等等)的列表肯定不会发生。
我已经尝试过使用itertools.chain等,但他们似乎只能在清单列表上工作。帮帮我!
可能重复:
Flatten (an irregular) list of lists in Python压扁在Python混合列表(含iterables和noniterables)
我怎么会去压扁Python中同时包含iterables和noniterables列表,例如作为[1,[2,3,4],5,[6]]?结果应该是[1,2,3,4,5,6],列表(等等)的列表肯定不会发生。
我已经尝试过使用itertools.chain等,但他们似乎只能在清单列表上工作。帮帮我!
所以你只想平坦化1或2个层次,而不是递归到更深层次;并且只能在列表中,而不是其他迭代,比如字符串,元组,阵列......我是否确定了你的规格?好的,如果是的话,那么...:
def flat2gen(alist):
for item in alist:
if isinstance(item, list):
for subitem in item: yield subitem
else:
yield item
如果你想要一个列表结果,list(flat2gen(mylist))
会产生它。
希望这对你来说很容易适应,如果你的实际规格细微差别!
完美;谢谢!有时间的初步试验表明,它可能是一个触动太慢,但我看到情况很少。 – 2010-07-03 21:50:00
@etotheipi,什么是典型的,有意义的“基准'alist'”为你的应用程序,你得到什么时间(以及在什么平台上)以及哪些更好?有可能以多种方式进行调整和优化,但不是在真空中,所以这些都是必需的(理想情况下在一个新的问题中,以便允许宽敞的A的答案,而不是一个挤塞的评论线程;也理想地与一些典型的“基准”alist's,不仅仅是1)。 – 2010-07-03 21:54:44
不介意我说的 - 我没有改变timeit的单位,我错误地认为这个函数太慢了(doh!)。实际上,我的机器上大约需要56微秒的时间来通过比实际大小的输入(最多8-10个项目)大15倍的输入咀嚼,所以这正是我所需要的。再次感谢! – 2010-07-03 21:58:33
@KennyTM,no:Q是专门关于任意嵌套的列表,而这个人想要下降不超过一个级别 - 非常不同的问题,对于这个问题递归(或递归消除)将是非常不合适的简单的迭代是好的,看我的A. – 2010-07-03 21:33:17