Obtenga el siguiente elemento de la lista en Python
(4)
Tengo una lista de oraciones como:
lst = [''A B C D'',''E F G H I J'',''K L M N'']
Lo que hice es
l = []
for i in lst:
for j in i.split():
print(j)
l.append(j)
first = l[::2]
second = l[1::2]
[m+'' ''+str(n) for m,n in zip(first,second)]
La salida que obtuve es
lst = [''A B'', ''C D'', ''E F'', ''G H'', ''I J'', ''K L'', ''M N'']
La salida que quiero es:
lst = [''A B'', ''B C'',''C D'',''E F'',''F G'',''G H'',''H I'',''I J'',''K L'',''L M'',''M N'']
Estoy luchando por pensar cómo lograr esto.
Aquí hay un método que usa Regex:
import re
lst = [''A B C D'',''E F G H I J'',''K L M N'']
result = re.findall(r''(?=(/b/w+?/b /b/w+?/b))'', str(lst))
print(result)
Salida:
[''A B'', ''B C'', ''C D'', ''E F'', ''F G'', ''G H'', ''H I'', ''I J'', ''K L'', ''L M'', ''M N'']
Primero formatee su lista de cadenas en una lista de listas, luego haga un mapeo por
zip
.
i = [i.split() for i in lst]
f = [f"{x} {y}" for item in i for x,y in zip(item,item[1::])]
print (f)
#[''A B'', ''B C'', ''C D'', ''E F'', ''F G'', ''G H'', ''H I'', ''I J'', ''K L'', ''L M'', ''M N'']
Su problema es que está aplanando toda la lista y dividiendo a parejas cuando desea dividir a las parejas posteriores solo los elementos internos. Entonces para eso realizaremos la operación en cada elemento por separado:
lst = [''A B C D'',''E F G H I J'',''K L M N'']
res = []
for s in lst:
sub_l = s.split()
for i in range(len(sub_l)-1):
res.append("{} {}".format(sub_l[i], sub_l[i+1]))
print(res)
Da:
[''A B'', ''B C'', ''C D'', ''E F'', ''F G'', ''G H'', ''H I'', ''I J'', ''K L'', ''L M'', ''M N'']
nested = []
for item in lst:
item = ('' ''.join(item).split())
for ix in range(len(item) - 1):
nested.append('' ''.join(item[ix:ix + 2]))
print (nested)
salida:
[''A B'', ''B C'', ''C D'', ''E F'', ''F G'', ''G H'', ''H I'', ''I J'', ''K L'', ''L M'', ''M N'']