[英]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.