在Python中,转换此结构的最优雅的方法是:
Upload corpus documents and include ground truth (upload the original workspace's type system first)
进入此结构:
['group1, group2, group3']
并可能返回。
所需要的是一个函数,该函数可以采用逗号分隔值的字符串列表(第一种情况)或具有相同值的字符串列表(第二种情况)并将它们当作一个相同的对象处理:一个列表字符串。
使用伪代码:
['group1', 'group2', 'group3']
此外,如果根据建议使用x = ['group1, group2, group3']
y = ['group1', 'group2', 'group3']
f(x) <==> f(y) <- equivalent behavior
:
有没有办法使分隔符空间不敏感,是否有条件或不使用正则表达式:我想获取split()
或['group1', 'group2', 'group3']
甚至是{ {1}}(或其组合)作为输入?
更多说明:
['group1, group2, group3']
基本上,我正在寻找最优雅的Python条件表达式,在上面的['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'
>>>
。
答案 0 :(得分:3)
您可以使用split
和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
答案 1 :(得分:1)
如何使用split()
:
['group1, group2, group3'][0].split(', ')
x = ['group1, group2, group3']
print(x[0].split(', '))
['group1', 'group2', 'group3']
要返回,请使用str.join()
y = x[0].split(', ')
print(y)
xx = [', '.join(y)]
print(xx)
['group1', 'group2', 'group3']
['group1, group2, group3']
答案 2 :(得分:1)
您可以在,
上使用str.split
来定义函数,然后使用itertools.chain
来使结果变平
>>> from itertools import chain
>>> f = lambda x: list(chain(*[a.split(', ') for a in x]))
>>> f(['group1', 'group2', 'group3'])
>>> ['group1', 'group2', 'group3']
>>> 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']
答案 3 :(得分:1)
您的编辑几乎在那儿
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']
答案 4 :(得分:0)
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']
答案 5 :(得分:0)
通过使用str.replace()
消除所有空白,您可以使用适用于所有出现的情况的公式。
lst = ['group1, group2, group3']
res = lst[0].replace(' ', '').split(',')
# ['group1', 'group2', 'group3']
答案 6 :(得分:0)
我认为使用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']