如果我有一个python列表:
text = ["the", "red", "", "", "fox", "", "is"]
如何使用itertools
(或其他方式)修改文本列表,以便检查elem
和elem+1
,如果找到等于""
,则它将它们从列表中删除。如果找到elem + elemt1
,我只希望修改列表(因此["fox" "", "is"]
部分保留在列表中)。列表元素的排序必须保持不变。
text = ["the", "red", "fox", "", "is"]
答案 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)