в Python3, как разделить списки списков в определенной позиции? - PullRequest
0 голосов
/ 14 мая 2018
['2006/10/18 21:15:51 4.823 -82.592 37.3 SOUTH OF PANAMA']  
['2006/10/18 10:08:45 32.165 -115.891 7.3 BAJA CALIFORNIA, MEXICO']  

Есть два списка из одного исходного списка:

a = [['2006/10/18 21:15:51 4.823 -82.592 37.3 SOUTH OF PANAMA'], 
['2006/10/18 10:08:45 32.165 -115.891 7.3 BAJA CALIFORNIA, MEXICO'] ] 

Здесь я хочу разделить каждое из них перед названиями стран, например:

['2006/10/18 21:15:51 4.823 -82.592 37.3]' '[SOUTH OF PANAMA']  
['2006/10/18 10:08:45 32.165 -115.891 7.3]' '[BAJA CALIFORNIA, MEXICO']  

Моя проблема в том, как использовать split () (или, возможно, некоторые другие способы), чтобы python понял, что я хочу разделить эти списки в этой конкретной позиции?

Ответы [ 3 ]

0 голосов
/ 14 мая 2018
a = [['2006/10/18 21:15:51 4.823 -82.592 37.3 SOUTH OF PANAMA'], 
['2006/10/18 10:08:45 32.165 -115.891 7.3 BAJA CALIFORNIA, MEXICO'] ]

fixed_split = 5
b = [[' '.join(i[0].split()[:fixed_split]), ' '.join(i[0].split()[fixed_split:])] for i in a]
print(b)

выход

[['2006/10/18 21:15:51 4.823 -82.592 37.3', 'SOUTH OF PANAMA'], ['2006/10/18 10:08:45 32.165 -115.891 7.3', 'BAJA CALIFORNIA, MEXICO']]
0 голосов
/ 14 мая 2018

re.split() - хороший выбор для комплексного разделения:

import re

[re.split('([\d\/\.\-\:\s]+)\s+([A-Z\s\,]+)', x[0])[1:3] for x in a]
0 голосов
/ 14 мая 2018

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

import re
s = [['2006/10/18 21:15:51 4.823 -82.592 37.3 SOUTH OF PANAMA']  , ['2006/10/18 10:08:45 32.165 -115.891 7.3 BAJA CALIFORNIA, MEXICO']]
new_s = [re.split('(?<=\d)\s(?=[A-Z])', i) for [i] in s]

Выход:

[['2006/10/18 21:15:51 4.823 -82.592 37.3', 'SOUTH OF PANAMA'], ['2006/10/18 10:08:45 32.165 -115.891 7.3', 'BAJA CALIFORNIA, MEXICO']]
...