如何在列表的开头和结尾处删除空白元素

时间:2018-07-10 16:12:44

标签: python list

我有一个字符串列表,仅需要在列表的开头和结尾删除空字符串序列。我需要保留非空字符串之间的所有空字符串。

例如,

my_list = ['', '', 'Sam sits', '', 'Thinking of you.', '', 'All ideas bad.', '', '', '']  

输出应为;

['Sam sits', '', 'Thinking of you.', '', 'All ideas bad.']  

我尝试使用的大多数方法也摆脱了中间的空白行。 任何建议将不胜感激。

3 个答案:

答案 0 :(得分:4)

一种更有效的方法,但是如果您选择列表元素中未包含的元素,则可以 join strip split ,它们仅从正面和背面移除元素,并保留中间的空白元素。

>>> '-'.join(my_list).strip('-').split('-')
['Sam sits', '', 'Thinking of you.', '', 'All ideas bad.']

扩展此方法以将列表中间更长的空字符串连接为单个空字符串:

import re

def remove_join(arr, el):
    return re.split(r'\{}+()'.format(el), el.join(arr).strip(el))

>>> my_list = ['', '', 'test', '', '', '', 'test2', '', '']
>>> remove_join(my_list, '-')
['test', '', 'test2']

答案 1 :(得分:4)

查看各种列表方法。您可以使用从左到右的搜索,并检查它们是否是第一个和最后一个元素。相反,只要删除最左边的元素,只要它是不希望的元素即可。例如:

while my_list[0] == '':
    my_list.pop(0)

while my_list[-1] == '':
    my_list.pop(-1)

为了提高效率(创建一个新列表,但仅更改一个列表):

# First, form a Boolean list that identifies non-empty elements
has_content = [len(s) > 0 for s in my_list]
# Then find the left and right non-empty elements.
left  = has_content.find(True)    # find the left  non-empty string
right = has_content.rfind(True)   # find the right non-empty string
new_list = my_list[left:right+1]

这不检查极端情况,但给出了总体思路。

答案 2 :(得分:1)

您可以先使用nextenumerate计算索引。然后切片您的列表。

my_list = ['', '', 'Sam sits', '', 'Thinking of you.', '', 'All ideas bad.', '', '', '']

idx1 = next(i for i, j in enumerate(my_list) if j)
idx2 = -next(i for i, j in enumerate(reversed(my_list)) if j)

res = my_list[idx1: idx2]

print(res)

['Sam sits', '', 'Thinking of you.', '', 'All ideas bad.']