簡體   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