Python中元组的所有项目

时间:2013-10-15 03:10:24

标签: 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)

它对我有用。有没有更好的方法呢?

5 个答案:

答案 0 :(得分:3)

不要忘记作弊方式

>>> from ast import literal_eval
>>> t = ((1, 2), 3, (4, 5), 6)
>>> literal_eval(repr(t).translate(None, '()'))
(1, 2, 3, 4, 5, 6)

答案 1 :(得分:1)

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()))

答案 2 :(得分:1)

我认为你的方式很好。这是另一种使用递归的方法,它适用于任意深度嵌套的可迭代结构:

def get_all_items(iterable):
    try:
        result = []
        for element in iterable:
            result += detuple(element)
        return result
    except TypeError:
        return [iterable]

此外,知道您描述的操作被称为“展平”数据结构可能会有用。

答案 3 :(得分:1)

import itertools
itertools.chain.from_iterable(
    item if hasattr(item, '__iter__') else (item,)
        for item in iterable 
)

答案 4 :(得分:1)

您可以像这样简化代码

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)