2017-08-08 1 views
3

Ich habe eine Liste wie folgt aus:Wie reverse() mehrere Muster in Python?

['t__f326ea56', 
'foo\tbar\tquax', 
'some\ts\tstring'] 

Ich möchte wie diese Ergebnisse in 4 verschiedenen Variablen erhalten:

s1 = 't__f326ea56' 
s2 = ['foo', 'some'] 
s3 = ['bar', 's'] 
s4 = ['quax', 'string'] 

Normalerweise könnte ich wie re.search(r'(.*)\t(.*)\t(.*)', lst).group(i) eine Suche, um die s2 zu erhalten, s3, s4. Aber ich kann nicht simultan nach allen 4 suchen. Gibt es eine spezielle Option im Modul, die ich verwenden kann?

Dank

Antwort

2

Sie können die split() Methode im re Modul verwenden:

import re 

s = ['t__f326ea56', 
'foo\tbar\tquax', 
'some\ts\tstring'] 

new_data = [re.split("\\t", i) for i in s] 
s1 = new_data[0][0] 

s2, s3, s4 = map(list, zip(*new_data[1:])) 

Ausgang:

s1 = 't__f326ea56' 
s2 = ['foo', 'some'] 
s3 = ['bar', 's'] 
s4 = ['quax', 'string'] 

Edit:

für Listen von Listen:

s = [['t__f326ea56', 'foo\tbar\tquax', 'some\ts\tstring'], ['second\tbar\tfoo', 'third\tpractice\tbar']] 

new_s = [[re.split("\\t", b) for b in i] for i in s] 

new_s jetzt speichert:

[[['t__f326ea56'], ['foo', 'bar', 'quax'], ['some', 's', 'string']], [['second', 'bar', 'foo'], ['third', 'practice', 'bar']]] 

Um die Daten in new_s transponieren:

new_s = [[b for b in i if len(b) > 1] for i in new_s] 

final_s = list(map(lambda x: zip(*x), new_s)) 

final_s speichert nun die Daten in der ursprünglichen Art und Weise wollen Sie es:

[[('foo', 'some'), ('bar', 's'), ('quax', 'string')], [('second', 'third'), ('bar', 'practice'), ('foo', 'bar')]] 
+0

ThanksI ich diesen Fehler, Valueerror: zu viele Werte (erwartet 3) zu entpacken, wenn ich es auf einer Liste von Listen führen. Irgendwelche Ideen? – 0x1

+1

Bitte beachten Sie meine letzte Änderung. – Ajax1234

+0

Macht Sinn. Vielen Dank! – 0x1

1

Verwenden von "gerade" str.split() Funktion:

l = ['t__f326ea56', 'foo\tbar\tquax', 'some\ts\tstring'] 
items1, items2 = l[1].split('\t'), l[2].split('\t') 
s1, s2, s3, s4 = l[0], [items1[0], items2[0]], [items1[1], items2[1]], [items1[2], items2[2]] 
print(s1, s2, s3, s4) 

Der Ausgang:

t__f326ea56 ['foo', 'some'] ['bar', 's'] ['quax', 'string']