2017-06-02 6 views
2
x_list = ["I", "live", "in", "New", "-", "York", "City", ".", "I", "am" "from", "New", "-", "Delhi"] 

Dies ist meine Liste. Was ich will ist, das Wort vor und nach dem Bindestrich "-" zu verbinden. So dass meine Liste wird.Wie werden Elemente einer Liste verknüpft, die ein bestimmtes Kriterium erfüllen?

x_list = ["I", "live", "in", "New-York", "City", ".", "I", "am", "from", "New-Delhi"] 

Gibt es eine kurz-elegante Art, dies zu tun?

+0

Wie wird diese Liste erstellt? Es wäre wahrscheinlich einfacher, damit umzugehen, bevor die Wörter aufgeteilt werden. – asongtoruin

+2

nennen Sie auch nicht Ihre Variable 'list' – asongtoruin

+0

Leider war dies in einem Datensatz und ich werde erwartet, es zu bereinigen. Wenn das ein normaler Text wäre, hätte ich leicht Regex verwenden können, um sie richtig zu tokenisieren. – Djokester

Antwort

2

Sie können ein enumerate d for -loop:

lst = ["I", "live", "in", "New", "-", "York", "City"] 
for index, item in enumerate(lst): 
    if item == '-': 
     lst[index-1:index+2] = [''.join(lst[index-1:index+2])] 

print(lst) # ['I', 'live', 'in', 'New-York', 'City'] 

oder wenn Sie mit kurzen Listen und einige '-' (wie in Ihrem Beispiel) zu tun könnten Sie auch eine while Schleife verwenden. Dies hat jedoch quadratisches Laufzeitverhalten so nicht dies mit vielen '-' für große Listen verwenden, wenn Sie über die Leistung kümmern:

lst = ["I", "live", "in", "New", "-", "York", "City"] 
while '-' in lst: 
    pos = lst.index('-') 
    lst[pos-1:pos+2] = [''.join(lst[pos-1:pos+2])] 

print(lst) # ['I', 'live', 'in', 'New-York', 'City'] 
+2

Die erste Version hat eine quadratische Anzahl von Bindestrichen. – enedil

+0

@enedil Ja, deshalb habe ich auch die zweite Version hinzugefügt :) Denken Sie, dass es eine offensichtliche Warnung in der Antwort braucht? – MSeifert

+0

Ich glaube schon. Softwere-Ingenieure (vor allem Anfänger) sind bei solchen Problemen nicht vorsichtig. – enedil

4

Eine seltsame, aber elegante Art und Weise Bit:

lst = ["I", "live", "in", "New", "-", "York", "City"] 

pattern = "<erpvinpervin>" 
s = pattern.join(lst) 
s = s.replace("{0}-{0}".format(pattern), "-") 
lst = s.split(pattern) 

Wie pattern können Sie Verwende eine beliebige Zeichenfolge, die du in deiner Liste nicht finden kannst.

0

Es gibt vielleicht bessere Möglichkeiten, dies zu tun, aber dieses funktioniert gut und ist ziemlich einfach zu verstehen.

Verwandte Themen