繁体   English   中英

Python:从函数创建列表,返回单个项目或另一个列表

[英]Python: Create list from function that returns single item or another list

(Python 3.5)。

问题陈述:给定一个返回项目或项目列表的函数,是否有一个单行语句可以从调用上述函数的结果初始化一个新列表?

详细信息:我查看了python列表上的文档,并在repl上尝试了一些内容,但我似乎无法想出这个。

我正在调用一个读取xml文档的第三方函数。 该函数有时会返回一个列表,有时会返回一个项目(取决于存在多少个xml条目)。

出于我的目的,我总是需要一个可以迭代的列表 - 即使它是一个长度。 下面的代码正确地完成了我想要的。 鉴于Python的优雅,它看起来很笨重。 我怀疑有一种单行方式。

def force_list(item_or_list):
    """
    Returns a list from either an item or a list.
    :param item_or_list: Either a single object, or a list of objects
    :return: A list of objects, potentially with a length of 1.
    """
    if item_or_list is None: return None
    _new_list = []
    if isinstance(item_or_list, list):
        _new_list.extend(item_or_list)
    else:
        _new_list.append(item_or_list)
    return _new_list

先谢谢,SteveJ

如果你正在寻找一个关于函数调用结果的单线程:

假设有一个名为func返回一个项目或一个项目列表:

elem = func()
answer = elem if isinstance(elem, list) else [elem]

话虽这么说,你应该重构func来返回一种类型的东西 - 让它返回许多元素的列表,或者在它只返回一个元素的情况下,让它返回一个包含该元素的列表。 因此,您可以避免这种类型检查

你可以在一行中检查它:

 if item: # Check whether it is not None or empty list
     # Check if it is list. If not, append it to existing list after converting it to list
     _new_list.extend(item if isiinstance(item, list) else [item])

在单行中执行此操作的另一种方法是

def force_list(item_or_list=[]):
    return item_or_list if type(item_or_list) is list else [item_or_list]

print force_list(“test”)

测试

print force_list([“test”,“test2”])

[ “测试”, “TEST2”]

暂无
暂无

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

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