Modyfikacja listy

0

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

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

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

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ć?

2

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

2

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

for i in range(len(lista)):
    lista[i] = lista[i].replace('[', '')
    lista[i] = lista[i].replace(']', '')
1

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

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]
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.

0

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

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

Otrzymuje:

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

A chciałbym coś takiego:

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1