Ich habe eine Eingabe wie diese:
['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Ich möchte Elemente zusammenfügen ''
, um eine Ausgabe wie diese zu erhalten:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
Ich habe versucht, join
Slicing wie folgt zu verwenden und aufzulisten:
a=['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
a[2:5] = [''.join(a[ 2: 5])]
a=['assembly', '', 'python', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Dies funktioniert bis zu einem gewissen Grad, aber ich weiß nicht, wie ich diese Anweisung für die gesamte Liste wiederholen soll.
Das ist schrecklich und hackig, aber
Sie können jede Zeichenfolge verwenden, von der Sie garantieren können, dass sie nicht in der Verkettung der Liste enthalten ist, und eine Funktion zurückgeben, die das tut, was Sie möchten. Natürlich möchten Sie dies wahrscheinlich nur ein- oder zweimal für Ihre spezielle Situation verwenden. Wenn Sie also garantieren können, dass kein Element der Liste ein Leerzeichen enthält, sieht es möglicherweise eher so aus:
quelle
Wenn Sie itertools nicht verwenden können oder wollen:
quelle
Du kannst das:
Ausgabe:
Nach Kommentaren bearbeiten:
Ausgabe:
quelle
# get the indices.
ist kein sehr nützlicher Kommentar. Ich würde vorschlagen, dass Sie es entweder nützlich machen (z. B.filter the indices to keep only those that correspond to whitespace
) oder es vollständig entfernen.indices = [i for s in a if s == '']
?indx = [i for i, x in enumerate(a) if x == '']
a = ['asse','mbly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c+', '+']
aber es sieht so aus, als könnten Sie Ihre Zeile 3 verbessern, indem Sie eine Liste mit einer Nullzeichenfolge an den Enden von a anhängen undenumerate([''] + a + [''])
dann dasa[0:indx[0]]
unda[indx[-1]+1:]
in Ihrer Zeile 4 entfernen. Dies berücksichtigt immer noch nicht, ob zwei Nullzeichenfolgen direkt nebeneinander liegen obwohlWenn die Eingabetrennzeichen tatsächlich leere Zeichenfolgen sind, können Sie dies tun
quelle
Ziemlich alt, aber immer noch nützlich:
Dies ergibt
quelle
Führen Sie eine Schleife über die Liste
innerhalb der Schleife aus. Hängen Sie das Element an eine temporäre leere Zeichenfolge an und prüfen Sie, ob das Element eine leere Zeichenfolge oder das letzte Element der Liste ist. Wenn dies der Fall ist, hängen Sie die temporäre Variable an die Ausgabeliste an und ändern Sie den Wert dieser Variablen in eine leere Zeichenfolge
Code:
Ausgabe:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
quelle
Ich würde zustimmen, dass die Cris- Antwort den meisten Python-Ansatz verwendet , aber es wird gut sein, die Cris- Antwort ein wenig anzupassen . Anstatt unnötige Mehrdeutigkeiten
groupby(l,key = bool)
zu verwendengroupby(l, key = lambda x: x !='')
und zu beseitigenPS Ich schreibe nur die neue Antwort, weil ich nicht genug Ruf habe, um einen Kommentar zur Cris- Antwort zu schreiben .
quelle
Eine andere funktionierende Version mit nur grundlegenden Schleifen / Tests:
quelle