在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条件表达式,如果在ab以上的情况下会导致相同的输出:['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']

08-27 17:58