Удалить все элементы после указанного c элемента во вложенном списке python - PullRequest
0 голосов
/ 18 января 2020

У меня есть следующий вложенный список, и я хочу удалить все элементы после Мой профиль (включая Мой профиль ).

my_lst = [['John C, CEO & Co-Funder, ABC company','Eric P, CFO, QWE company','My Profile','Herber W, CTO, PPP company'],
['Eli S, AVP, ACV Company', 'My Profile','Brian M, Analyst, LPL company'],
['Diana F, Managing Director, MS company','Alan X, Associate, JPM company','My Profile', 'Jame R, Manager, AL company']]

Я попробовал кодирование [[i for i in nested if i != 'My Profile'] for nested in my_lst], но могу удалить только Мой профиль из каждого списка.

Мои ожидаемые результаты:

[['John C, CEO & Co-Funder, ABC company','Eric P, CFO, QWE company'],
['Eli S, AVP, ACV Company'],
['Diana F, Managing Director, MS company','Alan X, Associate, JPM company']]

Заранее спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 18 января 2020

Вы можете использовать itertools.takewhile для этой задачи:

from itertools import takewhile

my_lst = [['John C, CEO & Co-Funder, ABC company','Eric P, CFO, QWE company','My Profile','Herber W, CTO, PPP company'],
['Eli S, AVP, ACV Company', 'My Profile','Brian M, Analyst, LPL company'],
['Diana F, Managing Director, MS company','Alan X, Associate, JPM company','My Profile', 'Jame R, Manager, AL company']]

out = []
for i in my_lst:
    out.append([*takewhile(lambda k: k!='My Profile', i)])

from pprint import pprint
pprint(out)

Отпечатки:

[['John C, CEO & Co-Funder, ABC company', 'Eric P, CFO, QWE company'],
 ['Eli S, AVP, ACV Company'],
 ['Diana F, Managing Director, MS company', 'Alan X, Associate, JPM company']]

РЕДАКТИРОВАТЬ (версия для понимания списка):

out = [[*takewhile(lambda k: k!='My Profile', i)] for i in my_lst]
2 голосов
/ 18 января 2020

Используя понимание списка, вы можете сделать:

my_lst = [['John C, CEO & Co-Funder, ABC company','Eric P, CFO, QWE company','My Profile','Herber W, CTO, PPP company'],
['Eli S, AVP, ACV Company', 'My Profile','Brian M, Analyst, LPL company'],
['Diana F, Managing Director, MS company','Alan X, Associate, JPM company','My Profile', 'Jame R, Manager, AL company']]
results = [nested[:nested.index('My Profile')] if 'My Profile' in nested else nested for nested in my_lst]

Без понимания списка:

my_lst = [['John C, CEO & Co-Funder, ABC company','Eric P, CFO, QWE company','My Profile','Herber W, CTO, PPP company'],
    ['Eli S, AVP, ACV Company', 'My Profile','Brian M, Analyst, LPL company'],
    ['Diana F, Managing Director, MS company','Alan X, Associate, JPM company','My Profile', 'Jame R, Manager, AL company']]
results = []
for nested in my_lst:
    filtered = nested[:nested.index('My Profile')] if 'My Profile' in nested else nested
    results.append(filtered)
...