繁体   English   中英

从元组的元组创建列表

[英]Create a list from a tuple of tuples

我正在寻找一种不同的方法来从元组的元组中获取字符串列表。 我现在是这样的:

x = (('a',1), (2,3), (4,), (), (None,))
op_list = []
for item in x:
    if item and item[0]:
        op_list.append(str(item[0]))
print op_list

输出:['a','2','4']

我想不出任何其他方法进入名单。 我的问题是,是否有任何更好/替代/漂亮的方法?

编辑:向输入中添加了一些陷阱输入,例如一个空的元组,具有None的元组以及给定的预期输出。 还编辑了问题以确保我只需要一个字符串列表,而不管None以外的任何其他数据类型。

>>> x = (('a',1), (2,3), (4,))
>>> [str(item[0]) for item in x if item and item[0]]
['a', '2', '4']

也许使用maplambda函数为您提供了最简单,更紧凑的方法:

>>> x = (('a',1), (2,3), (4,), (None,), ())
>>> filter(None, map(lambda i: str(i[0]) if len(i) > 0 and i[0] != None else None, x))
['a', '2', '4']

使用itemgetter

from operator import itemgetter
f = itemgetter(0)

def func(i):
    if not i:
        return None
    r = f(i)
    if r:
        return str(r)

使用它:

>>> x = (('a',1), (2,3), (4,), None, '', False, [], (None,), ())
>>> filter(None, map(func, x))
['a', '2', '4']

您可以将其变成一个函数:

def extract_first_non_none(collection):
    return filter(None, map(func, collection))

或成一类:

class Extractor():
    def __init__(self, index):
        self.getter = itemgetter(index)

    def _func(self, item):
        if not item:
            return None
        r = self.getter(item)
        if r != None:
            return str(r)

    def extract(self, collection):
        return filter(None, map(self._func, collection))

使用类:

>>> x = (('a',1), (2,3), (4,), None, '', False, [], (None,), ())
>>> e = Extractor(0)
>>> e.extract(x)
['a', '2', '4']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM