Python函数中输入字符串的灵活拆分

Python函数中输入字符串的灵活拆分,python,function,split,Python,Function,Split,在Python中,转换此结构最优雅的方式是什么: ['group1, group2, group3'] 在这一结构中: ['group1', 'group2', 'group3'] 而且可能会回来 所需要的是一个函数,它可以获取逗号分隔值的字符串列表(第一种情况)或相同值的字符串列表(第二种情况),并将它们作为一个相同的对象处理:字符串列表 在伪代码中: x = ['group1, group2, group3'] y = ['group1', 'group2', 'group3'] f(

在Python中,转换此结构最优雅的方式是什么:

['group1, group2, group3']
在这一结构中:

['group1', 'group2', 'group3']
而且可能会回来

所需要的是一个函数,它可以获取逗号分隔值的字符串列表(第一种情况)或相同值的字符串列表(第二种情况),并将它们作为一个相同的对象处理:字符串列表

在伪代码中:

x = ['group1, group2, group3']
y = ['group1', 'group2', 'group3']

f(x) <==> f(y)    <- equivalent behavior
基本上,我正在寻找最优雅的Python条件表达式,在上面的
a
b
情况下都会产生相同的输出:
['group1'、'group2'、'group3'、'group4']

如何使用:

代码: 测试代码: 结果: 返回: 要返回,请使用
str.join()

结果: 如何使用:

代码: 测试代码: 结果: 返回: 要返回,请使用
str.join()

结果: 您可以使用和从一个表示形式到另一个表示形式:

print('group1, group2, group3'.split(', '))
# ['group1', 'group2', 'group3']
print(', '.join(['group1', 'group2', 'group3']))
# group1, group2, group3
在函数中,您可以执行以下操作:

def f(items, index, separator=', '):
    if isinstance(items, str):
        items = items.split(separator)
    return items[index]


print(f('group1, group2, group3', 1))        # group2
print(f(['group1', 'group2', 'group3'], 1))  # group2
您可以使用和从一个表示形式到另一个表示形式:

print('group1, group2, group3'.split(', '))
# ['group1', 'group2', 'group3']
print(', '.join(['group1', 'group2', 'group3']))
# group1, group2, group3
在函数中,您可以执行以下操作:

def f(items, index, separator=', '):
    if isinstance(items, str):
        items = items.split(separator)
    return items[index]


print(f('group1, group2, group3', 1))        # group2
print(f(['group1', 'group2', 'group3'], 1))  # group2

您可以使用,定义函数,然后使用

在使用变量分隔符和可选空格的情况下,正则表达式是更好的选择

>>> import re
>>> f = lambda x, sep: list(chain(*[re.split('{}\s*'.format(sep), a) for a in x]))
>>> f(['group1, group2,group3'],',')
>>> ['group1', 'group2', 'group3']

您可以使用,定义函数,然后使用

在使用变量分隔符和可选空格的情况下,正则表达式是更好的选择

>>> import re
>>> f = lambda x, sep: list(chain(*[re.split('{}\s*'.format(sep), a) for a in x]))
>>> f(['group1, group2,group3'],',')
>>> ['group1', 'group2', 'group3']
split()和join()可以尝试

case1 = ['group1, group2, group3']
output = [ele.split(",") for ele in case1]
案例1的输出

[['group1', ' group2', ' group3']]
案例2

case2 = [['group1', ' group2', ' group3']]
output = [", ".join(ele) for ele in case2]
案例2的输出

['group1, group2, group3']
split()和join()可以尝试

case1 = ['group1, group2, group3']
output = [ele.split(",") for ele in case1]
案例1的输出

[['group1', ' group2', ' group3']]
案例2

case2 = [['group1', ' group2', ' group3']]
output = [", ".join(ele) for ele in case2]
案例2的输出

['group1, group2, group3']
通过使用
str.replace()
消除所有空白,您可以使用适用于所有案例的公式

lst = ['group1, group2, group3']

res = lst[0].replace(' ', '').split(',')
# ['group1', 'group2', 'group3']
通过使用
str.replace()
消除所有空白,您可以使用适用于所有案例的公式

lst = ['group1, group2, group3']

res = lst[0].replace(' ', '').split(',')
# ['group1', 'group2', 'group3']

在编辑过程中,您几乎做到了:

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']

在编辑过程中,您几乎做到了:

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']

我认为使用
split
strip
最清楚

# various scenarios to test
TESTS = [
    ['group1, group2, group3'],
    ['group1', 'group2', 'group3'],
    ['group1,group2,  group3'],
    ['group1', 'group2, group3'],
    ['group1 ,group2', 'group3'],
]


def normalize(args, delimiter=','):
    results = []
    for arg in args:
        results.extend(x.strip() for x in arg.split(delimiter))
    return results


for args in TESTS:
    assert normalize(args) == ['group1', 'group2', 'group3']


# test alternative delimiter
assert normalize(['group1 | group2 | group3'], delimiter='|') == ['group1', 'group2', 'group3']

我认为使用
split
strip
最清楚

# various scenarios to test
TESTS = [
    ['group1, group2, group3'],
    ['group1', 'group2', 'group3'],
    ['group1,group2,  group3'],
    ['group1', 'group2, group3'],
    ['group1 ,group2', 'group3'],
]


def normalize(args, delimiter=','):
    results = []
    for arg in args:
        results.extend(x.strip() for x in arg.split(delimiter))
    return results


for args in TESTS:
    assert normalize(args) == ['group1', 'group2', 'group3']


# test alternative delimiter
assert normalize(['group1 | group2 | group3'], delimiter='|') == ['group1', 'group2', 'group3']

谢谢有没有办法使分隔符空格不敏感:我想得到
['group1'、'group2'、'group3']
结果,要么是
['group1,group2,group3']
要么是
['group1,group2,group3']
,要么就是这个
['group1,group2,group3']
(或者它们的组合)作为输入?@SimeonLeyzerzon,您可以在纯逗号上拆分并去除标记:
y=[t.strip(),表示x[0]中的t。拆分(','))
@schwobasegll您的评论似乎与我想要的内容最接近-您可能希望将其作为正式答案,如果您愿意再看一看,我已经用更多的澄清更新了我的问题。谢谢。谢谢。有没有办法使分隔符空格不敏感:我想进入
['group1','group2','group3']
结果要么是
['group1,group2,group3']
要么是
['group1,group2,group3']
,甚至是这个
['group1,group2,group3']
(或它们的组合)作为输入?@SimeonLeyzerzon您可以在简单的逗号上拆分并去除标记:
y=[t.strip(),表示x[0]中的t。拆分(','))
@schwobasegll您的评论似乎最接近我想要的内容-您可能希望将其作为正式答案,如果您愿意再看一看的话,我已经对我的问题进行了更详细的说明。谢谢。分隔符可以是有条件的吗?'、'或','。我想正则表达式更合适?当然,如果您需要拆分几件事情的话分隔符可以是有条件的吗?“,”或“,”。我想正则表达式更合适?当然,如果你需要拆分一些东西,应该可以。