как объединить новый сжатый список в середину существующего сжатого списка, используя python - PullRequest
0 голосов
/ 04 мая 2020

Я получил этот оригинальный список:

list1=[['jennifer ryann', 'jennifer lopez'],[' jennifer anniston', 'jennifer jason leigh and jennifer morrison', 'Jennifer Garner']]

. По некоторым причинам я разделил подсписок:

from itertools import chain
lists = list(chain.from_iterable(list1))

Мне также нужно сжать элементы:

list2 = [(el1, el2) for el1, el2 in zip(lists, lists[1:])]

Все элементы в списке 2, например, попарно (сжатый список), ('jennifer ryann', 'jennifer lopez'). Несколько пар элементов, содержащих слова ' и ', такие как ('jennifer anniston Дженнифер Джейсон Ли и Дженнифер Моррисон.

Я собираюсь сделать:

  1. Если в элементе найдены слова 'и' , элементы будут разбиты, а слово ' и 'должны быть удалены. Например, слова ' и ', содержащиеся в элементах 'jennifer jason leigh' и 'jennifer morrison' , будут удалены.
  2. Тогда элемент пары ' Дженнифер Эннистон 'будет упакована с обоими разделенными элементами ' Дженнифер Джейсон Ли ' и ' Дженнифер Моррисон '. Он будет генерировать два новых архива, таких как («Дженнифер Аннистон», «Дженнифер Джейсон Ли») и («Дженнифер Эннистон», «Дженнифер Моррисон»)
  3. А также оба расщепленных элемента ' Дженнифер Джейсон Ли 'и' Дженнифер Моррисон 'будут заархивированы следующим элементом ' Дженнифер Гарнер '. Это могут быть сгенерированы еще два элемента («Дженнифер Джейсон Ли», «Дженнифер Гарнер») и («Дженнифер Моррисон», «Дженнифер Гарнер»)

Ожидаемый результат будет следующим:

[('jennifer ryann', 'jennifer lopez'), ('jennifer lopez', ' jennifer anniston'), (' jennifer anniston', 'jennifer jason leigh '),(' jennifer anniston', ' jennifer morrison'), (' jennifer jason leigh ', 'jennifer Garner ') , (' jennifer morrison ', 'jennifer Garner ') ]

В моем коде я могу сгенерировать новый сжатый список в текущем сжатом списке, но не могу объединить текущий сжатый список в список2.

Это мой код

curr_zipp = []

for s, sublists in enumerate(list2):
    for e in range(len(sublists)):
        if 'and' in sublists[e]:
            if e== 1 :
                root_elem = sublists[e - 1]
                split_elem = sublists[e].split('and')
                curr_zipp.append((root_elem,split_elem[0]))
                curr_zipp.append((root_elem,split_elem[1]))


            elif e ==0:
                root_elem = sublists[e -1]
                split_elem = sublists[e].split('and')
                curr_zipp.append((split_elem[0],root_elem))
                curr_zipp.append((split_elem[1],root_elem))

Надеюсь, кто-нибудь поможет мне объединить список curr_zip без изменения текущей позиции элементов. Мне важно сохранить номер позиции. Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...