Как сгладить / разделить элементы в списке, разделенные "и" - PullRequest
0 голосов
/ 16 мая 2018

У меня есть следующий список

mylist = ["'alpha','beta'",'delta','phi']

Сочетание двойных кавычек и одинарных кавычек для первого элемента мешает мне правильно работать с альфа и бета отдельно.Когда я использую

mylist[1] 

, я получаю

delta

вместо бета-версии, чего я хочу

Как разделить первый элемент этого списка на 2элементы и вставьте их так, чтобы у меня было 4 элемента в этом списке?

Прежде чем вы скажете мне не писать список таким образом, знайте, что это вывод одной строки, из которой я уже разделил

"'alpha, beta'"

РЕДАКТИРОВАТЬ: Многие из вас просят код, который формирует этот список .... и я, честно говоря, не мог опубликовать его, потому что часть кода требует входа ввеб-сайт для доступа к закрытым данным.

Следующий код решил мою проблему:

mylist = [re.sub('^\W+|\W+$', '', i) for b in map(lambda x:re.split(',', x), mylist) for i in b]

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Еще одно использование регулярных выражений: вы можете просто findall слова \w+ в строках:

>>> mylist = ["'alpha','beta'",'delta','phi']

>>> [y for x in mylist for y in re.findall("\w+", x)]
['alpha', 'beta', 'delta', 'phi']

или split по всем остальным \W или, более конкретно [,"' ]:

>>> [y for x in mylist for y in re.split("\W", x) if y]
['alpha', 'beta', 'delta', 'phi']

>>> [y for x in mylist for y in re.split("[,'\" ]", x) if y]
['alpha', 'beta', 'delta', 'phi']
0 голосов
/ 16 мая 2018

Вы можете использовать map:

import re

def split_words(d):
  return [re.sub('^\W+|\W+$', '', i) for b in map(lambda x:re.split("(?<='),(?=')", x), d) for i in b]

mylist = [["'alpha','beta'",'delta','phi'], ["'alpha','beta'",'delta','phi, theta']]
final_results = list(map(split_words, mylist))

Выход:

[['alpha', 'beta', 'delta', 'phi'], ['alpha', 'beta', 'delta', 'phi, theta']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...