将混合嵌套列表转换为嵌套元组

时间:2014-11-20 21:35:12

标签: python python-3.x nested-lists

如果我有

easy_nested_list = [['foo', 'bar'], ['foofoo', 'barbar']]

并希望

(('foo', 'bar'), ('foofoo', 'barbar'))

我能做到

tuple(tuple(i) for i in easy_nested_list)

但如果我有

mixed_nested_list = [['foo', 'bar'], ['foofoo', ['foo', 'bar']],'some', 2, 3]

并且想要建立一个元组,我不知道如何开始。

很高兴获得:

(('foo', 'bar'), ('foofoo', ('foo', 'bar')), 'some', 2, 3)

第一个问题是Python将我的字符串转换为每个字符的元组。第二件事是我得到了

TypeError: 'int' object is not iterable

1 个答案:

答案 0 :(得分:9)

递归转换,并测试列表:

def to_tuple(lst):
    return tuple(to_tuple(i) if isinstance(i, list) else i for i in lst)

这会为给定列表生成一个元组,但会使用递归调用转换任何嵌套的list对象。

演示:

>>> def to_tuple(lst):
...     return tuple(to_tuple(i) if isinstance(i, list) else i for i in lst)
... 
>>> mixed_nested_list = [['foo', 'bar'], ['foofoo', ['foo', 'bar']],'some', 2, 3]
>>> to_tuple(mixed_nested_list)
(('foo', 'bar'), ('foofoo', ('foo', 'bar')), 'some', 2, 3)