在Python中,转换此结构的最优雅方法是:
['group1, group2, group3']
变成这个结构:
['group1', 'group2', 'group3']
并可能回来。
所需要的是一个函数,该函数可以采用逗号分隔值的字符串列表(第一种情况)或具有相同值的字符串列表(第二种情况),并将它们当作一个相同的字符串来处理。
用伪代码:
x = ['group1, group2, group3']
y = ['group1', 'group2', 'group3']
f(x) <==> f(y) <- equivalent behavior
另外,如果按照建议使用
split()
:有没有办法使分隔符空间不敏感或有条件或正则表达式:我想获取
['group1', 'group2', 'group3']
或['group1, group2, group3']
甚至是['group1,group2,group3']
(或其组合)的['group1, group2,group3']
结果输入?进一步说明:
>>> single_string = False
>>> a = ['group1', 'group2', 'group3','group4']
>>> [t.strip() for t in [a][0].split(',')] if single_string else a
['group1', 'group2', 'group3', 'group4']
>>> single_string = True
>>> b = ['group1,group2, group3, group4']
>>> [t.strip() for t in [b][0].split(',')] if single_string else b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'split'
>>>
基本上,我正在寻找最优雅的Python条件表达式,如果在
a
和b
以上的情况下会导致相同的输出:['group1', 'group2', 'group3', 'group4']
。 最佳答案
您几乎已经在编辑中了:
def f(lst):
return [t.strip() for t in lst[0].split(',')] if len(lst) == 1 else lst
>>> a = ['group1', 'group2', 'group3','group4']
>>> b = ['group1,group2, group3, group4']
>>> f(a)
['group1', 'group2', 'group3', 'group4']
>>> f(b)
['group1', 'group2', 'group3', 'group4']