我是编程新手。我有一个清单。列表包含多个空格。所有多个空格都应替换为单个空格。
lis = ['h','e','l','l','','','','','o','','','','w']
output = ['h','e','l','l','','o','','w']
谁能告诉我怎么做?
答案 0 :(得分:0)
您可以使用itertools
。这里的想法是根据字符串是否为空进行分组,注意bool('') == False
。
from itertools import chain, groupby
L = (list(j) if i else [''] for i, j in groupby(lis, key=bool))
res = list(chain.from_iterable(L))
print(res)
['h', 'e', 'l', 'l', '', 'o', '', 'w']
答案 1 :(得分:0)
您可以对enumerate
使用列表推导
然后只选择那些''
自己跟踪非空字符
[c for i, c in enumerate(lis) if c or (not c and lis[i - 1])]
答案 2 :(得分:0)
您可以在列表理解中简单地使用zip()
,如下所示:
In [21]: lis = ['', '', 'h','e','l','l','','','','','o','','','','w', '', '']
In [22]: lis[:1] + [j for i, j in zip(lis, lis[1:]) if i or j]
Out[22]: ['', 'h', 'e', 'l', 'l', '', 'o', '', 'w', '']
在这种情况下,如果一对中的一个有效(非空),我们将遍历每个对并保留第二个。此时您只需将第一项添加到结果中,因为省略了它。
答案 3 :(得分:0)
为什么不只是for循环?
new_list = []
for char in lis:
if char == '' and new_list[-1] == '': continue
new_list.append(char)
输出
['h', 'e', 'l', 'l', '', 'o', '', 'w']
答案 4 :(得分:0)
简单的列表理解就足够了:
lis = ['h','e','l','l','','','','','o','','','','w']
output = [v for i, v in enumerate(lis) if v != '' or i == 0 or (v == '' and lis[i-1] != '')]
print(output)
这将打印:
['h', 'e', 'l', 'l', '', 'o', '', 'w']