Python中元组中的所有项
我有一个元组,它由一些整数元组和一些整数组成,比如Python中元组中的所有项,python,tuples,Python,Tuples,我有一个元组,它由一些整数元组和一些整数组成,比如((1,2),3,(4,5),6)。现在我需要它的所有整数。我写道: def get_all_items(iterable): t = [] for each in iterable: if type(each) == int: t.append(each) else: t.extend(each) return tuple(t) 它对我
((1,2),3,(4,5),6)
。现在我需要它的所有整数。我写道:
def get_all_items(iterable):
t = []
for each in iterable:
if type(each) == int:
t.append(each)
else:
t.extend(each)
return tuple(t)
它对我有用。有更好的方法吗?我认为你的方法很好。另一种方法是使用递归,它适用于任意深度嵌套的iterable结构:
from itertools import chain
def flatten(items):
def renest():
for item in items:
try:
yield iter(item)
except TypeError:
yield iter([item])
return list(chain.from_iterable(renest()))
def get_all_items(iterable):
try:
result = []
for element in iterable:
result += detuple(element)
return result
except TypeError:
return [iterable]
另外,了解您正在描述的操作被称为“扁平化”数据结构可能会很有用。您可以像这样简化代码
import itertools
itertools.chain.from_iterable(
item if hasattr(item, '__iter__') else (item,)
for item in iterable
)
def get_all_items(iterable):
t = []
for each in iterable:
t.extend(list(each) if isinstance(each, tuple) else [each])
return tuple(t)
print get_all_items(((1, 2), 3, (4, 5), 6))
输出
(1, 2, 3, 4, 5, 6)
别忘了作弊的方法
>>> from ast import literal_eval
>>> t = ((1, 2), 3, (4, 5), 6)
>>> literal_eval(repr(t).translate(None, '()'))
(1, 2, 3, 4, 5, 6)
@DSM是的,我忘记了itertools不是魔法。很容易忘记,因为它经常是。^)你能肯定的知道只有一个层次结构,也就是说,你没有一个元组的元组的元组吗?代码并不经常让我发笑。。。我想让我着迷的是“骗子的方式”