假设我有一个对象a
,可以是字符串(如'hello'
或'hello there'
)或列表(如['hello', 'goodbye']
)。我需要检查a
是否是字符串或列表。如果它是一个字符串,那么我想将其转换为一个元素列表(因此将'hello there'
转换为['hello there']
)。如果它是一个列表,那么我想把它作为一个列表。
是否有Pythonic单行代码才能执行此操作?我知道我能做到:
if isinstance(a, str):
a = [a]
但是我想知道是否有一个更直接,更Pythonic的单线来做到这一点。
答案 0 :(得分:4)
您可以使用三元运算符:
a = [a] if isinstance(a, str) else a
答案 1 :(得分:1)
[a] if isinstance(a, str) else a
答案 2 :(得分:1)
我更喜欢其他选项,而不是isinstance
:
b = [a] if type(a) is str else a
print(b)
可以采取相反的方式:
b = a if type(a) is list else [a]
甚至让它变得有点健壮:
b = a if type(a) in [list, tuple] else [a]
如果你也处理元组。
答案 3 :(得分:0)
这适用于字符串和字符串列表/元组/字符串集。此外,它将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]
测试:
>>> 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('')
['']
如果您不想将None
转换为空列表,请删除else [] if s is None
。