Есть ли более краткий способ создания пар из списка python? - PullRequest
0 голосов
/ 04 марта 2020

У меня есть список, где x[0][0] = position of x[0][1] в строке S .

x  = [[157, 'Start_Summary'], [1228, 'End_Summary'], [1233, 'Start_Skills'], [1540, 'End_Skills'], [1925, 'Start_Work'], [2392, 'profile_start'], [4378, 'profile_end'], [4451, 'profile_start'], [5368, 'profile_end'], [5759, 'profile_start'], [7000, 'profile_end'], [7000, 'End_Work']]

Я хочу создать список кортежей таким образом, чтобы в выходном списке были пары позиций Начало и конец тега определенного типа -

y = [(157,1228),(1233,1540),(1925,7000),(2392,4378),(4451,5368),(5759,7000)]

Я пытался использовать для операторов l oop и if-else , но я ищу для pythoni c способ создания такого списка.

1 Ответ

0 голосов
/ 04 марта 2020

Вы можете хранить свои данные в collections.defaultdic:

from collections import defaultdict

data = defaultdict(list)

positions = {'start', 'end'}
for n, s in x:
    p, t = s.lower().split('_')
    if p not in positions:
        p, t = t, p
    data[t].append(n)

[tuple(v[i: i + 2] ) for v in data.values() for i in range(0, len(v)-1, 2)]

выводе:

[(157, 1228),
 (1233, 1540),
 (1925, 7000),
 (2392, 4378),
 (4451, 5368),
 (5759, 7000)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...