разделить список списка, который содержит строку - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть список списков, подобных этому:

[["testo=text1","testo2=text2"],["testo3=text3","testo4=text4"]]

Я хочу разделить каждый элемент каждого подсписка на "=".

Желаемый результат:

[['testo', 'text1'],['testo2', 'text2']]

Я пытался перебирать каждый подсписок и разбивать его.Но это не работает:

[j.split("=") for j in [i for i in splitted_params]]

продолжаю получать 'list' object has no attribute 'split' ошибка

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Вы можете использовать chain.from_iterable(), чтобы избежать двойного цикла for в понимании списка:

from itertools import chain

l = [["testo=text1", "testo2=text2"], ["testo3=text3", "testo4=text4"]]

[i.split('=') for i in chain.from_iterable(l)]
# [['testo', 'text1'], ['testo2', 'text2'], ['testo3', 'text3'], ['testo4', 'text4']]

Объяснение, почему ваше решение не работает:

splitted_params = [["testo=text1", "testo2=text2"], ["testo3=text3", "testo4=text4"]]

print([i for i in splitted_params] == splitted_params)
# True

Таккогда вы используете [i for i in splitted_params] внутри вашего listcomp, вы получаете тот же список.

0 голосов
/ 27 февраля 2019

Вы не должны пытаться быть умным с пониманием списка Python.На мой взгляд, вы должны пойти на удобочитаемое решение.:)

if __name__ == '__main__':
    data = [
        ["testo=text1","testo2=text2"],
        ["testo3=text3","testo4=text4"]
    ]

    for arr in data:
        for index in range( len(arr) ):
            arr[index] = arr[index].split('=')

    print(data)

В вашем выражении [j.split("=") for j in [i for i in splitted_params]] сначала вычисляется внутреннее выражение [i for i in splitted_params], что дает вам список.Вы ничего не сделали в этом понимании списка.Затем, когда вы оцениваете [j.split("=") for j in SOME_RESULT_YOU_GOT], вы пытаетесь разделить список, что невозможно.

0 голосов
/ 27 февраля 2019

Я думаю, проблема в том, что [i for i in splitted_params] это не возвращает списки в вашем списке списков.он просто возвращает ваш список списков, поэтому при повторном цикле он попытается разбить списки в списке списков.

, поэтому я бы посоветовал вам просто сделать цикл в цикле, подобном этому

listoflists = [["testo=text1", "testo2=text2"], ["testo3=text3", "testo4=text4"]]
for i in listoflists:
    for j in i:
        print(j.split("="))

Это может быть не так красиво, но это делает работу.

0 голосов
/ 27 февраля 2019

попытка:

l = [["testo=text1","testo2=text2"],["testo3=text3","testo4=text4"]]

new_l = [inner_element.split("=") for x in l for inner_element in x]

print(new_l)

вывод:

[['testo', 'text1'], ['testo2', 'text2'], ['testo3', 'text3'], ['testo4', 'text4']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...