切片python列表
我有一个python列表,如下所示:切片python列表,python,list,Python,List,我有一个python列表,如下所示: >>>list1 = ['Mary','had','a','little','lamb','which','was','very','naughty'] 现在我想创建一个包含从little到very元素的子列表。因此,我做了以下工作: >>> list1[list1.index('little'):list1.index('very')+1] ['little', 'lamb', 'which', 'was', 'ver
>>>list1 = ['Mary','had','a','little','lamb','which','was','very','naughty']
现在我想创建一个包含从little到very元素的子列表。因此,我做了以下工作:
>>> list1[list1.index('little'):list1.index('very')+1]
['little', 'lamb', 'which', 'was', 'very']
我想做的不是指定整个元素,而是使用in函数检查元素中的子字符串,然后对列表进行切片,如下所示:
>>> list1[list1.index('lit'):list1.index('ver')+1]
我该怎么做?正如我在前面的回答中所说的,您不需要使用
list.index
方法,您可以使用以下更快的函数,也可以对元素应用任何计算:
def drop(iterable,start,end):
for i,x in enumerate(iterable):
if x==start :
for y in iterable[i:]:
if y!=end and 'sub_string' in y: #or 'sub_string' not in y
yield y
else:
#based on your problem do stuff
#yield end
break
他是你的朋友。有了这些和列表理解,它变得非常简单
list1[[i for i, j in enumerate(list1) if "lit" in j][0]:[i for i, j in enumerate(list1) if "ver" in j][0]+1]
这段代码所做的是,它只在包含字符串时接受元素,但存储索引而不是元素。对开始和结束执行此操作,并使用第一个匹配项可以得到所需的结果。为了保持可读性,您需要将其分解为多个语句,而不是使用大列表:
>>> list1 = ['Mary','had','a','little','lamb','which','was','very','naughty']
>>> first = next(i for i, v in enumerate(list1) if 'lit' in v)
>>> last = next(i for i, v in enumerate(list1) if 'ver' in v)
>>> list1[first:last+1]
['little', 'lamb', 'which', 'was', 'very']
这可能不是你想要的答案(尤其是考虑行数)。但我想展示不同的方法(特别是如果您是Python新手): 这里有几个问题:
- fuzzyFilter只能使用一次(或者需要某种重置)
- 可以保证,整个列表1都会被读取(在其他答案中并不总是如此)
class fuzzyFilter:
def __init__(startSubstr, endSubstr):
self.start = startSubstr
self.end = endSubstr
self.state = None
def __call__(value):
if self.state is None:
if self.start in value:
self.state = True
return True
elif self.state:
if self.end in value:
self.state = False
return True
return False
print filter(fuzzyFilter('lit', 'very'), list1)