Modyfikacja listy

A1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 19
0

Chciałbym zmodyfikować listę, poprzez usunięcie z niej znaków '[', ']', ',' oraz dodanie znaków spacji.
Wygląda ona tak:

Kopiuj
lista = ['22814[0, 0, 1, 0, 0]', '11246[0, 1, 0, 0, 1]']

Chciałbym, żeby ona wyglądała w ten sposób:

Kopiuj
lista = ['22814 0 0 1 0 0', '11246 0 1 0 0 1']

Próbowałem wykorzystać funkcję replace, ale wyskakuje błąd: AttributeError: 'list' object has no attribute 'replace'.
Z jakiej innej funkcji można byłoby skorzystać?

lambdadziara
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 444
2

bo robisz replace na liscie zamiast na stringu
lista=[elem.replace(",","").replace("]","") for elem in lista]
czy cos takiego

PerlMonk
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa 🐪
  • Postów: 1719
2

Interpreter dobrze prawi. Nie ma funkcji do podmiany elementów listy. Możesz zrobić to inaczej, np.:

Kopiuj
for i in range(len(lista)):
    lista[i] = lista[i].replace('[', '')
    lista[i] = lista[i].replace(']', '')
nalik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1039
1

Ciągi o długości 1 można zamienić następująco:

Kopiuj
translation = str.maketrans({'[':' ', ']':' ', ',': ''})
l = ['22814[0, 0, 1, 0, 0]', '11246[0, 1, 0, 0, 1]']
l = [x.translate(translation).strip() for x in l]
Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
3

Do takich rzeczy służy map() — piszesz sobie funkcję czyszczącą stringi (u Ciebie wygląda jak replace('[', ' '), replace(']', ' ') (na spację, bo tego tutaj chyba chcesz) i strip() do usunięcia krańcowych spacji, jeśli się takie pojawią.

Możesz też oczywiście przeiterować po tablicy, jak Ci wyżej podpowiadają — jeśli uważasz, że tak jest czytelniej. Będzie to troszkę wolniejsze niż map(), ale nie ma się tym co przejmować, czytelność jest zazwyczaj dużo ważniejsza. Warto jednak mieć obrabianie stringa jako osobną funkcję tak czy owak.

A1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 19
0

Bardzo dziękuję za pomoc. Chciałbym jeszcze spytać czy jest możliwość takiego załamania listy.
Wykonując ten kod:

Kopiuj
for x, _ in enumerate(nex):
    add.append(str(nex[x].name) + str(indels[x]))

Otrzymuje:

Kopiuj
['22814 0 0 1 0 0', '11246 0 1 0 0 1']

A chciałbym coś takiego:

Kopiuj
['22814 0 0 1 0 0', 
'11246 0 1 0 0 1']
Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
0

Możesz dorzucić do tworzonego stringa znak nowej linii '\n' tam gdzie chcesz.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.