Как разделить слова на месте, во вложенном списке - PullRequest
0 голосов
/ 05 февраля 2020

Это мой код:

abc - это многомерный список

Список ввода: abc = [['word1_word1.5','word2'],['word1_word1.5','word2']]

for i in range(len(abc)):
    for j in range(len(abc[i])):
        if "word1_word1.5" in abc[i][j]:
                newword = abc[i][j].split("_")
                // Replace the abc[i][j] with "word1" and "word1.5"

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

abc = [['word1','word1.5','word2'],['word1','word1.5','word2']]

Ответы [ 3 ]

2 голосов
/ 05 февраля 2020
for lst in abc:
    for n in range(len(lst)):
        if lst[n] in xyz:
            wrd = lst.pop(n)
            lst += wrd.split("_")

Это заменит слова, существующие в xyz, на их разделенную версию, на месте в abc

2 голосов
/ 05 февраля 2020

Учитывая это:

>>> abc = [['word1_word1.5', 'word2', 'word3', 'word4_word4.5'], ['word5_word5.5', 'word2', 'word3', 'word1_word1.5']]

Разделение каждого слова:

>>> [[w.split('_') for w in l] for l in abc]
[[['word1', 'word1.5'], ['word2'], ['word3'], ['word4', 'word4.5']], [['word5', 'word5.5'], ['word2'], ['word3'], ['word1', 'word1.5']]]

Конкатенация подсписков:

>>> from itertools import chain
>>> [list(chain.from_iterable(w.split('_') for w in l)) for l in abc]
[['word1', 'word1.5', 'word2', 'word3', 'word4', 'word4.5'], ['word5', 'word5.5', 'word2', 'word3', 'word1', 'word1.5']]

Разделение только при появлении w в xyz:

>>> xyz = {'word1_word1.5', 'word5_word5.5', 'word4_word4.5'}
>>> [list(chain.from_iterable(w.split('_') if w in xyz else [w] for w in l)) for l in abc]
[['word1', 'word1.5', 'word2', 'word3', 'word4', 'word4.5'], ['word5', 'word5.5', 'word2', 'word3', 'word1', 'word1.5']]
0 голосов
/ 05 февраля 2020
for item in abc:
    for ele in item:
        if ele in xyz:
            split_word = ele.split("_")

Этот лог c возвращает разделенные слова в виде списка, хранящегося в split_word. Теперь замените исходное слово в abc на split_word.

Надеюсь, это поможет:)

...