从这个列表
lst=['a,b,c','d,e']
我想获得以下一个
lst=['a','b','c','d','e']
所以我认为首先应该删除第一个列表中的引号,但是这一行
[i for i in lst.split(' ' ' ')]
产生如下错误信息:AttributeError: 'list' object has no attribute 'split'
我应该如何修改我的代码来得到我需要的?
我知道我已经回答了,我只是注意到,由于元素是字符串并且有逗号分隔,您可以在列表上使用str.join
,然后只使用str.split
结果来获得所需的输出:
','.join(lst).split(',')
>>> lst = ['a,b,c','d,e']
>>> ','.join(lst).split(',')
['a', 'b', 'c', 'd', 'e']
注意,这在这种情况下有效,但只是因为您的特定值。
如果您想使用列表推导式,它将看起来像这样:
[y for x in lst for y in x.split(',')]
错误是因为您在list
上调用split
,但您需要在str
上调用它。for x in lst
为您提供字符串作为x
,然后您调用split(',')
以获得y
,这是最终列表中的内容。
这相当于:
output = []
for x in lst:
for y in x.split(','):
output.append(y)
您应该首先遍历lst
列表中的每个文本,以逗号分隔这些文本,然后将分割文本的字符平铺成如下所示的列表:
lst=['a,b,c','d,e']
character_lst = [char for text in lst for char in lst.split(",")
# character_list will contain ['a','b','c','d','e']
使用itertools.chain
:
from itertools import chain
list(chain(*(s.split(',') for s in lst)))
或(较慢的)全功能变体:
from itertools import chain
list(chain(*map(lambda x: x.split(','), lst)))
输出:
['a', 'b', 'c', 'd', 'e']
没有导入或嵌套循环:
lst = ['a,b,c','d,e']
output = []
for x in lst:
output.extend(x.split(','))