转换为嵌套在列表列表中的元组列表
convert to tuple list nested in a list of list
我需要使用 set(myList)
但这是不可能的,因为我有一个列表列表。 (它给出了一个不可散列的错误)。
所以我决定将列表中的每个元素都转换为一个元组。该列表大致如下:
MyList[elem1, elem2, [nested1, nested2, [veryNested1, veryNested2]]]
如何快速将所有内容转换为元组,然后再转换回列表?
嗯,我以前见过这种问题。我通过使用递归解决了它(假设最终元素是下一层,并且我知道递归需要多深才能将其拆分。
话虽如此,我认为最好问一下您是否以那种格式获得了列表,或者您是否通过某种过程将其制成了?这可能会帮助我们避免一些不必要的抨击。
应该这样做:
def lol_to_tuple(lol):
return tuple(el if type(el) is not list
else lol_to_tuple(el)
for el in lol)
要返回,只需将元组替换为列表:
def tuples_to_lol(tuples):
return list(el if type(el) is not tuple
else tuples_to_lol(el)
for el in tuples)
您可以通过以下方式展平您的列表:
In [1]: from compiler.ast import flatten
In [2]: flatten([1, 2, [11, 12, [21, 22]]])
Out[2]: [1, 2, 11, 12, 21, 22]
然后使用 set(myList)
使用递归
MyList = ['elem1', 'elem2', ['nested1', 'nested2', ['veryNested1', 'veryNested2']]]
print MyList
def tupconv(lst):
tuplst = []
for x in lst:
if isinstance(x, list):
tuplst.append(tupconv(x))
else:
tuplst.append(x)
return tuple(tuplst)
def listconv(tup):
lst = []
for x in tup:
if isinstance(x, tuple):
lst.append(listconv(x))
else:
lst.append(x)
return lst
mytup = tupconv(MyList)
print mytup
mylist = listconv(mytup)
print mylist
我需要使用 set(myList)
但这是不可能的,因为我有一个列表列表。 (它给出了一个不可散列的错误)。
所以我决定将列表中的每个元素都转换为一个元组。该列表大致如下:
MyList[elem1, elem2, [nested1, nested2, [veryNested1, veryNested2]]]
如何快速将所有内容转换为元组,然后再转换回列表?
嗯,我以前见过这种问题。我通过使用递归解决了它(假设最终元素是下一层,并且我知道递归需要多深才能将其拆分。
话虽如此,我认为最好问一下您是否以那种格式获得了列表,或者您是否通过某种过程将其制成了?这可能会帮助我们避免一些不必要的抨击。
应该这样做:
def lol_to_tuple(lol):
return tuple(el if type(el) is not list
else lol_to_tuple(el)
for el in lol)
要返回,只需将元组替换为列表:
def tuples_to_lol(tuples):
return list(el if type(el) is not tuple
else tuples_to_lol(el)
for el in tuples)
您可以通过以下方式展平您的列表:
In [1]: from compiler.ast import flatten
In [2]: flatten([1, 2, [11, 12, [21, 22]]])
Out[2]: [1, 2, 11, 12, 21, 22]
然后使用 set(myList)
使用递归
MyList = ['elem1', 'elem2', ['nested1', 'nested2', ['veryNested1', 'veryNested2']]]
print MyList
def tupconv(lst):
tuplst = []
for x in lst:
if isinstance(x, list):
tuplst.append(tupconv(x))
else:
tuplst.append(x)
return tuple(tuplst)
def listconv(tup):
lst = []
for x in tup:
if isinstance(x, tuple):
lst.append(listconv(x))
else:
lst.append(x)
return lst
mytup = tupconv(MyList)
print mytup
mylist = listconv(mytup)
print mylist