Mam takie dane wejściowe:
['assembly', '', 'py', 'tho', 'n', '', 'ja', 'va', '', 'rub', 'y', '', 'java', 'script', '', 'c++']
Chcę połączyć elementy między, ''
aby uzyskać wynik podobny do tego:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
Próbowałem użyć join
i wyświetlić takie opcje:
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++']
Działa to do pewnego stopnia, ale nie wiem, jak iterować tę instrukcję dla całej listy.
To okropne i zuchwałe, ale
może pobrać dowolny ciąg, który może być zagwarantowany, że nie jest zawarty w konkatenacji listy i zwrócić funkcję wykonującą to, co chcesz. Oczywiście prawdopodobnie chcesz użyć tego tylko raz lub dwa razy w konkretnej sytuacji, więc jeśli możesz zagwarantować, że żaden element listy nie zawiera spacji, może wyglądać bardziej jak:
źródło
Jeśli nie możesz lub nie chcesz używać itertools:
źródło
Możesz to zrobić:
Wynik:
Edytuj po komentarzach:
Wynik:
źródło
# get the indices.
nie jest bardzo przydatnym komentarzem. Sugeruję, abyś przydał się (np.filter the indices to keep only those that correspond to whitespace
) Lub całkowicie go usunął.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+', '+']
ale wygląda na to, że możesz poprawić swoją linię 3, dodając listę z łańcuchem zerowym na końcach aenumerate([''] + a + [''])
następnie usuwająca[0:indx[0]]
ia[indx[-1]+1:]
w linii 4. To nadal nie uwzględnia, jeśli obok siebie są dwa ciągi zerowe chociażJeśli ograniczniki wejściowe są faktycznie pustymi łańcuchami, możesz to zrobić
źródło
Dość stary, ale wciąż przydatny:
To daje
źródło
uruchom pętlę nad listą
wewnątrz pętli, dodaj element do tymczasowego pustego łańcucha i sprawdź, czy element jest pustym łańcuchem lub ostatnim elementem listy, jeśli to prawda, dodaj zmienną tymczasową do listy wyników i zmień wartość tej zmiennej do pustego ciągu
Kod:
Wynik:
['assembly', 'python', 'java', 'ruby', 'javascript', 'c++']
źródło
Zgadzam się, że odpowiedź Cris używa większości podejść pythonowych , ale dobrze będzie dostosować Cris trochę odpowiedź . Zamiast używać
groupby(l,key = bool)
do używaniagroupby(l, key = lambda x: x !='')
i pozbyć się niepotrzebnej dwuznacznościPS Piszę tylko nową odpowiedź, ponieważ nie mam wystarczającej reputacji, aby napisać komentarz na temat Crisa odpowiedzi .
źródło
Kolejna działająca wersja z tylko podstawowymi pętlami / testami:
źródło