Разбейте длинную строку на несколько списков - PullRequest
0 голосов
/ 25 января 2020

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

1 | Миразур | Ментон, Франция | 2 | Нома | Копенгаген, Дания | 3 | Асадор Etxebarri | Axpe, Испания | 4 | Гагган | Бангкок, Таиланд | 5 | Герань | Копенгаген, Дания | 6 | Центральный | Лима, Перу | 7 | Мугариц | Сан-Себастьян, Испания | 8 | Арпеж | Париж, Франция | 9 | Disfrutar | Барселона, Испания | 10 | Майдо | Лима, Перу | 11 | Ден | Токио, Япония

Я хочу разбить его так, чтобы он выглядел как:

[1, Mirazur, Menton, France]
[2, Noma, Copenhagen, Denmark]
and so on so forth.

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

1 Ответ

0 голосов
/ 25 января 2020

Кусок торта. Основа разбивается на символ |; это даст вам список всех предметов. Затем разделите список на более мелкие с фиксированным размером; хорошо изученный вопрос с множеством ответов. Я выбрал { ссылка }, потому что он не использует никаких внешних библиотек и возвращает полезную базу для следующего шага:

print (zip(*[data.split('|')[i::3] for i in range(3)]))

Это возвращает тип zip, как можно видеть с

for item in zip(*[data.split('|')[i::3] for i in range(3)]):
    print (item)

, который довольно близок:

('1', 'Mirazur', 'Menton, France')
('2', 'Noma', 'Copenhagen, Denmark')
('3', 'Asador Etxebarri', 'Axpe, Spain')
etc.

(Если вам интересно, зачем нужен zip, выведите результат [data.split('|')[i::3] for i in range(3)].)

Последний шаг - преобразовать каждый кортеж в собственный список.

Собрать его вместе:

import pprint

data = '1|Mirazur|Menton, France|2|Noma|Copenhagen, Denmark|3|Asador Etxebarri|Axpe, Spain|4|Gaggan|Bangkok, Thailand|5|Geranium|Copenhagen, Denmark|6|Central|Lima, Peru|7|Mugaritz|San Sebastián, Spain|8|Arpège|Paris, France|9|Disfrutar|Barcelona, Spain|10|Maido|Lima, Peru|11|Den|Tokyo, Japan'

data = [list(item) for item in zip(*[data.split('|')[i::3] for i in range(3)])]
pprint.pprint (data)

Результат (отличное отступление от pprint ):

[['1', 'Mirazur', 'Menton, France'],
 ['2', 'Noma', 'Copenhagen, Denmark'],
 ['3', 'Asador Etxebarri', 'Axpe, Spain'],
 ['4', 'Gaggan', 'Bangkok, Thailand'],
 ['5', 'Geranium', 'Copenhagen, Denmark'],
 ['6', 'Central', 'Lima, Peru'],
 ['7', 'Mugaritz', 'San Sebastián, Spain'],
 ['8', 'Arpège', 'Paris, France'],
 ['9', 'Disfrutar', 'Barcelona, Spain'],
 ['10', 'Maido', 'Lima, Peru'],
 ['11', 'Den', 'Tokyo, Japan']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...