Modyfikacja listy

Modyfikacja listy
A1
  • Rejestracja:prawie 5 lat
  • Ostatnio:prawie 4 lata
  • 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:ponad 6 lat
  • Ostatnio:około 3 godziny
  • Postów:443
2

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

edytowany 1x, ostatnio: lambdadziara
PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • 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(']', '')

Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
edytowany 1x, ostatnio: PerlMonk
nalik
  • Rejestracja:ponad 9 lat
  • Ostatnio:21 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]
edytowany 6x, ostatnio: nalik
Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:18 minut
  • Postów:1607
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.

edytowany 1x, ostatnio: Althorion
A1
  • Rejestracja:prawie 5 lat
  • Ostatnio:prawie 4 lata
  • 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
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:18 minut
  • Postów:1607
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.