在包含字符的列表中添加单个空格

时间:2018-07-28 12:24:50

标签: python string python-3.x list

我是编程新手。我有一个清单。列表包含多个空格。所有多个空格都应替换为单个空格。

lis = ['h','e','l','l','','','','','o','','','','w']

output = ['h','e','l','l','','o','','w']

谁能告诉我怎么做?

5 个答案:

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