假设我有一个对象a,它可以是字符串(如'hello'或'hello there')或列表(如['hello', 'goodbye'])。我需要检查是否a为字符串或列表。如果是字符串,那么我想将其转换为一个元素列表(因此转换'hello there'为['hello there'])。如果是列表,那么我想把它作为列表保留下来。
是否有Pythonic单行代码可以做到这一点?我知道我可以做:
if isinstance(a, str):
a = [a]
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有更直接,更Pythonic的代码可以做到这一点。
这适用于字符串和字符串列表/元组/集合。此外,它将 a 转换None为空列表。
from typing import List, Optional, Set, Tuple, Union
def ensure_list(s: Optional[Union[str, List[str], Tuple[str], Set[str]]]) -> List[str]:
# Ref: https://stackoverflow.com/a/56641168/
return s if isinstance(s, list) else list(s) if isinstance(s, (tuple, set)) else [] if s is None else [s]
Run Code Online (Sandbox Code Playgroud)
测试:
>>> ensure_list('abc')
['abc']
>>> ensure_list(['a', 'bb', 'ccc'])
['a', 'bb', 'ccc']
>>> ensure_list(('a', 'bb', 'ccc'))
['a', 'bb', 'ccc']
>>> ensure_list({'a', 'bb', 'ccc'})
['ccc', 'a', 'bb']
>>> ensure_list(None)
[]
>>> ensure_list('')
['']
Run Code Online (Sandbox Code Playgroud)
如果您不想将 a 转换None为空列表,请删除else [] if s is None。