我有以下列表列表:
list_of_list = [["-", " ", "P"], ["-", " ", "L"], ["-", " ", "R"], ["K", "|", "K"], ["K", "|", "K"], ["I", " ", "-"], ["K", "|", "K"], ["-", " ", "K"], ["-", " ", "V"], ["-", " ", "D"], ["-", " ", "P"], ["-", " ", "K"], ["-", " ", "K"], ["-", " ", "D"], ["-", " ", "Q"], ["-", " ", "E"], ["A", "|", "A"], ["N", " ", "-"], ["-", " ", "K"], ["-", " ", "E"], ["R", "|", "R"], ["-", " ", "L"], ["-", " ", "K"], ["R", "|", "R"], ["S", " ", "-"], ["N", " ", "-"], ["S", " ", "-"], ["K", "|", "K"], ["-", " ", "I"], ["-", " ", "R"], ["K", "|", "K"], ["-", " ", "L"], ["-", " ", "E"]]
看起来像这样:
In [48]: list_of_list
Out[48]:
[['-', ' ', 'P'], # remove this
['-', ' ', 'L'], # remove this
['-', ' ', 'R'], # remove this
['K', '|', 'K'],
['K', '|', 'K'],
['I', ' ', '-'],
['K', '|', 'K'],
['-', ' ', 'K'],
['-', ' ', 'V'],
['-', ' ', 'D'],
['-', ' ', 'P'],
['-', ' ', 'K'],
['-', ' ', 'K'],
['-', ' ', 'D'],
['-', ' ', 'Q'],
['-', ' ', 'E'],
['A', '|', 'A'],
['N', ' ', '-'],
['-', ' ', 'K'],
['-', ' ', 'E'],
['R', '|', 'R'],
['-', ' ', 'L'],
['-', ' ', 'K'],
['R', '|', 'R'],
['S', ' ', '-'],
['N', ' ', '-'],
['S', ' ', '-'],
['K', '|', 'K'],
['-', ' ', 'I'],
['-', ' ', 'R'],
['K', '|', 'K'],
['-', ' ', 'L'], # remove this
['-', ' ', 'E']] # remove this
如上面的输出所示,我要做的是删除列表开头和结尾的元素。首先,我们删除第二个元素为空的所有列表,直到找到|
。最后,我们在找到的最后一个|
为空之后删除所有列表。
所需的输出是这样:
[['K', '|', 'K'],
['K', '|', 'K'],
['I', ' ', '-'],
['K', '|', 'K'],
['-', ' ', 'K'],
['-', ' ', 'V'],
['-', ' ', 'D'],
['-', ' ', 'P'],
['-', ' ', 'K'],
['-', ' ', 'K'],
['-', ' ', 'D'],
['-', ' ', 'Q'],
['-', ' ', 'E'],
['A', '|', 'A'],
['N', ' ', '-'],
['-', ' ', 'K'],
['-', ' ', 'E'],
['R', '|', 'R'],
['-', ' ', 'L'],
['-', ' ', 'K'],
['R', '|', 'R'],
['S', ' ', '-'],
['N', ' ', '-'],
['S', ' ', '-'],
['K', '|', 'K'],
['-', ' ', 'I'],
['-', ' ', 'R'],
['K', '|', 'K']]
我该如何实现?
答案 0 :(得分:2)
切片:
s = ''.join(b for a,b,c in list_of_list)
list_of_list[s.find('|'):s.rfind('|')+1]
答案 1 :(得分:1)
切片+ enumerate
:
l=[i for i,v in enumerate(list_of_list) if v[1]=='|']
l2=list_of_list[l[0]:l[-1]+1]
print(l2)
输出:
[['K', '|', 'K'], ['K', '|', 'K'], ['I', ' ', '-'], ['K', '|', 'K'], ['-', ' ', 'K'], ['-', ' ', 'V'], ['-', ' ', 'D'], ['-', ' ', 'P'], ['-', ' ', 'K'], ['-', ' ', 'K'], ['-', ' ', 'D'], ['-', ' ', 'Q'], ['-', ' ', 'E'], ['A', '|', 'A'], ['N', ' ', '-'], ['-', ' ', 'K'], ['-', ' ', 'E'], ['R', '|', 'R'], ['-', ' ', 'L'], ['-', ' ', 'K'], ['R', '|', 'R'], ['S', ' ', '-'], ['N', ' ', '-'], ['S', ' ', '-'], ['K', '|', 'K'], ['-', ' ', 'I'], ['-', ' ', 'R'], ['K', '|', 'K']]
答案 2 :(得分:0)
您可以使用itertools.groupby
:
import itertools
def remove_elements(l):
new_data = [[a, list(b)] for a, b in itertools.groupby(l, key=lambda x:x[1] == ' ')]
_, *content, _end = new_data
return [c for _, c in content]
list_of_list = [["-", " ", "P"], ["-", " ", "L"], ["-", " ", "R"], ["K", "|", "K"], ["K", "|", "K"], ["I", " ", "-"], ["K", "|", "K"], ["-", " ", "K"], ["-", " ", "V"], ["-", " ", "D"], ["-", " ", "P"], ["-", " ", "K"], ["-", " ", "K"], ["-", " ", "D"], ["-", " ", "Q"], ["-", " ", "E"], ["A", "|", "A"], ["N", " ", "-"], ["-", " ", "K"], ["-", " ", "E"], ["R", "|", "R"], ["-", " ", "L"], ["-", " ", "K"], ["R", "|", "R"], ["S", " ", "-"], ["N", " ", "-"], ["S", " ", "-"], ["K", "|", "K"], ["-", " ", "I"], ["-", " ", "R"], ["K", "|", "K"], ["-", " ", "L"], ["-", " ", "E"]]
print(remove_elements(list_of_list))
输出:
[[['K', '|', 'K'], ['K', '|', 'K']], [['I', ' ', '-']], [['K', '|', 'K']], [['-', ' ', 'K'], ['-', ' ', 'V'], ['-', ' ', 'D'], ['-', ' ', 'P'], ['-', ' ', 'K'], ['-', ' ', 'K'], ['-', ' ', 'D'], ['-', ' ', 'Q'], ['-', ' ', 'E']], [['A', '|', 'A']], [['N', ' ', '-'], ['-', ' ', 'K'], ['-', ' ', 'E']], [['R', '|', 'R']], [['-', ' ', 'L'], ['-', ' ', 'K']], [['R', '|', 'R']], [['S', ' ', '-'], ['N', ' ', '-'], ['S', ' ', '-']], [['K', '|', 'K']], [['-', ' ', 'I'], ['-', ' ', 'R']], [['K', '|', 'K']]]
或更长一些的解决方案,尽管更可靠:
_start = [i for i in range(len(l)) if all(c[1] == ' ' for c in l[:i])]
_end = [i for i in range(len(l)) if all(c[1] == ' ' for c in l[i:])]
new_l = l[0 if not _start else _start[-1]:len(l) if not _end else _end[-1]-1]
答案 3 :(得分:0)
只玩索引
def ind(l):
for i,v in enumerate(l):
if v[1]=="|": return i
ll = ll[ind(ll):]
ll[::-1][ind(ll[::-1]):][::-1]