Python删除列表元素

时间:2017-02-18 19:16:30

标签: python itertools

如果我有一个python列表:

text = ["the", "red", "", "", "fox", "", "is"]

如何使用itertools(或其他方式)修改文本列表,以便检查elemelem+1,如果找到等于"",则它将它们从列表中删除。如果找到elem + elemt1,我只希望修改列表(因此["fox" "", "is"]部分保留在列表中)。列表元素的排序必须保持不变。

text = ["the", "red", "fox", "", "is"]

4 个答案:

答案 0 :(得分:2)

from itertools import groupby, chain

print list(chain(*[
    l for l in [list(it) for _, it in groupby(text)] if l[:2] != ['', '']
]))

结果:

['the', 'red', 'fox', '', 'is']

使用groupby,我们可以将相同的连续元素作为列表。然后我们检查每个列表是否长度大于2且所有元素都是空字符串。然后我们保留我们想要的内容,并使用chain将列表展平。

答案 1 :(得分:2)

您可以使用itertools.groupby

import itertools

new = []
for item, group in itertools.groupby(text):
    group = list(group)
    if item != '' or len(group) == 1:
        new.extend(group)

>>> new
['the', 'red', 'fox', '', 'is']

groupby - 功能更高效。可以使用以下事实:当转换为False时,空字符串被视为bool

import itertools

new = []
for item, group in itertools.groupby(text, bool):
    group = list(group)
    if item or len(group) == 1:
        new.extend(group)

>>> new
['the', 'red', 'fox', '', 'is']

答案 2 :(得分:0)

它还可以使用2个以上的空格

text = ["the", "red", "","", "", "fox", "", "is"]
new_text = []

text_len = len(text);
print(text_len)
i = 0;
while(i < text_len):
    if (text[i] == "" and text[i + 1] == ""):
        i += 1;
        while(True):
                if (text[i] == "" and text[i + 1] == ""):
                    i+=1;
                else:
                        break;

    else :
        new_text.append(text[i]);
    i += 1;
print(new_text)

答案 3 :(得分:-3)

for t in text:
  if not t:
     text.remove(t)