Более Pythonic однострочное решение? - PullRequest
0 голосов
/ 11 ноября 2018

Я ищу более Pythonic однострочник, чтобы разделить и сгладить списки. Исходный список выглядит так:

negative_list = [['apple strudel', 'apple, orange, pear ice cream']]

С указанным выше необработанным списком мне нужно преобразовать его в следующий обработанный список:

negative_list = ['apple strudel', 'apple', 'orange', 'pear ice cream']

Вы заметите, что «яблоко», «апельсин», «грушевое мороженое» были разделены на отдельные элементы в преобразованном списке.

Я написал следующее:

negative_list = []
negatives = []
negative_list = [['apple strudel', 'apple, orange, pear ice cream']]
negative_list = [item for sublist in negative_list for item in sublist]
for i in negative_list: 
    if ',' not in i: negatives.append(i.strip())
    else:
        for element in i.split(','): negatives.append(element.strip())
print(negative_list)
print(negatives)

Я пытался написать Pythonic one-liner, не объявляя так много переменных, но с небольшим успехом. Может ли кто-нибудь помочь?

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

Используйте itertools.chain.from_iterable с выражением генератора:

from itertools import chain

negative_list = [['apple strudel', 'apple, orange, pear ice cream']]

print(list(chain.from_iterable(x.split(', ') for x in negative_list[0])))
# ['apple strudel', 'apple', 'orange', 'pear ice cream']
0 голосов
/ 11 ноября 2018

Я думаю, что это решает проблему

x = [['apple strudel', 'apple, orange, pear ice cream'], ["test", "test1, test2, test3"]]

def flatten(x):
    return sum([(x.split(", ")) for x in sum(x, [])], [])

print(flatten(x))
0 голосов
/ 11 ноября 2018

Вы можете попробовать это решение, хотя это не рекомендуется для производственного кода:

negative_list = [['apple strudel', 'apple, orange, pear ice cream']]

negative_list = sum([elem.split(", ") for elem in negative_list[0]],[])
print(negative_list)

Выход:

['apple strudel', 'apple', 'orange', 'pear ice cream']

Другой способ - использовать вложенный цикл for с list-comprehension:

negative_list = [elem.strip() for item in negative_list[0] for elem in item.split(", ")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...