我有一个简单的问题,我似乎找不到答案。我在list
中有一个python
我希望根据最后的值缩短。{1}}。例如,我说list = [0,0,1,2,1,2,2,2,0,1,1,0]
我要删除列表末尾或开头的任何0,这样就转换为list = [1,2,1,2,2,2,0,1,1]
。我尝试使用filter()
,但是当我只想删除目标时,这将删除所有0的实例。我是python的新手,似乎无法解决这个问题。任何帮助,将不胜感激!
答案 0 :(得分:6)
while list[0] == 0:
list.pop(0)
while list[-1] == 0:
list.pop()
但最好不要使用名为list
的变量,因为它会覆盖内置的list
类型。
答案 1 :(得分:3)
您可以执行以下操作:
from itertools import takewhile
def list_strip(sequence, item):
leading = sum(1 for el in takewhile(lambda L: L == item, sequence))
trailing = sum(1 for el in takewhile(lambda L: L == item, reversed(sequence)))
slc = slice(leading, -trailing or None)
return sequence[slc]
答案 2 :(得分:1)
def trim(lst, key=lambda i:i==0):
g = [(k,list(group)) for k, group in groupby(lst, key=key)]
if g[0][0]: del g[0]
if g[-1][0]: del g[-1]
return list(chain.from_iterable(group[1] for group in g))
使用itertools可以非常方便地处理左边裁剪,但是itertools对于列表的末尾来说并不是很好。
def ltrim(lst, v=0):
return list(itertools.dropwhile(lambda i:i==v, lst))
def rtrim(lst, v=0):
return reversed(ltrim(reversed(lst), v))
def trim(lst, v=0):
return ltrim(rtrim(lst, v), v)
答案 3 :(得分:0)
您可以使用pop
方法:
L.pop([index]) -> item
- 删除并返回索引处的项目(默认为last)。
如果list为空或索引超出范围,则引发IndexError。
答案 4 :(得分:0)
In [88]: L = [0,0,1,2,1,2,2,2,0,1,1,10,0]
In [89]: s = ','.join(str(i) for i in L)
In [90]: while s[-2:] == ',0':
....: s = s[:-2]
....:
In [91]: while s[:2] == '0,':
....: s = s[2:]
....:
In [92]: [int(i) for i in s.split(',')]
Out[92]: [1, 2, 1, 2, 2, 2, 0, 1, 1, 10]
更好的是:
In [102]: L = [0,0,1,2,1,2,2,2,0,1,1,10,0]
In [103]: blacklist = set()
In [104]: mid = False
In [105]: for i,num in enumerate(L):
if not mid and not num:
blacklist.add(i)
elif num:
mid = True
In [106]: mid = False
In [107]: for i,num in enumerate(reversed(L)):
if not mid and not num:
blacklist.add(len(L)-i)
elif num:
mid = True
In [108]: [num for i,num in enumerate(L) if i not in blacklist]
Out[108]: [1, 2, 1, 2, 2, 2, 1, 1, 10]
答案 5 :(得分:0)
可能不是最有效率,但一种方法是
>>> myList [0, 0, 1, 2, 1, 2, 2, 2, 0, 1, 1, 0] >>> [int(str_element) for str_element in "".join(str(int_element) for int_element in myList).strip('0')] [1, 2, 1, 2, 2, 2, 0, 1, 1]