• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python - append, split do listy

Object Storage Arubacloud
0 głosów
2,429 wizyt
pytanie zadane 14 lutego 2018 w Python przez 1mSnajper Początkujący (300 p.)
edycja 14 lutego 2018 przez 1mSnajper

Czesc,

Pythona ucze sie od 2 dni i mam do wykonania zadanie, w którym to mamy liste 6 liczb i jeżeli któraś z nich będzie równa 0, to ma zostać przerzucona na koniec listy. Np. z listy 0 2 4 5 0 6 mam zrobić 2 4 5 6 0 0. Problem polega na tym, że mam pomysł jak to zrobić, ale nie potrafię przeskoczyć błędów mówiących, że albo objekt typu str, albo int nie posiada atrybuty 'append' AttributeError: type object 'int' has no attribute 'append'. Próbowałem wielu zmian, ale moja aktualna wiedza nie jest w stanie rozwiązać tego problemu. Wykładowca pisząc program miał podobny kod, z tym, że u niego wszystko działało. Móglby mi ktoś wytłumaczyć jak krowie na rowie, w jaki sposób używać funkcji(?) append, split itp. tak żeby nie było już tego typu błędów?

Jeden z przykładów kodu jaki wytworzyłem:

print("Wypelnij tablice liczbami")
tablica = []
btablica = []
tablica = input()
btablica.append(tablica)
for i in btablica:
    btablica = btablica[i:-i].append('0')

print(btablica)

 

4 odpowiedzi

+1 głos
odpowiedź 14 lutego 2018 przez RogerB Gaduła (3,370 p.)
wybrane 15 lutego 2018 przez 1mSnajper
 
Najlepsza

Nie wiem czy jest to najlepszy sposób ale bądź co bądź działa

tab=[3,0,4,8,0,7]
for i in tab:
	if i==0:
		tab.remove(i)
		tab.append(i)

 

0 głosów
odpowiedź 14 lutego 2018 przez Benek Szeryf (91,010 p.)

Rozwiązanie najbardziej pythonic:

L = [0, 2, 4, 5, 0, 6]
L.sort(key=lambda x: not x) # [2, 4, 5, 6, 0, 0]

 

0 głosów
odpowiedź 14 lutego 2018 przez 1mSnajper Początkujący (300 p.)
Hmm, obie metody są bardzo obiecujące, tylko co, jeżeli tablica/lista miałaby zostać utworzona przez użytkownika?
0 głosów
odpowiedź 14 lutego 2018 przez 1mSnajper Początkujący (300 p.)

Znalazłem dosyć ciekawy zapis, który działa :

tab = [int(x) for x in input().split()]

Ale nie rozumiem go za bardzo, głownie chodzi mi o część input().split(). Oznacza to, że pętla ma się wykonywać dla każdego wpisanego elementu z uwzględnieniem znaku spacji? Czy coś zupełnie innego?

komentarz 14 lutego 2018 przez Benek Szeryf (91,010 p.)

Pętla wykonuje się dla input(), ale wcześniej wejściowe dane zostają rozbite za pomocą split(), gdzie domyślnym znakiem jest właśnie spacja. Jak uruchomisz program i wpiszesz:

>>> 1 2 4 2 Enter

To lista tab będzie wyglądać tak:

[1, 2, 4, 2]

 

komentarz 14 lutego 2018 przez 1mSnajper Początkujący (300 p.)

A gdyby nie było tego split to wtedy lista wyglądałaby tak: ?

['1 2 3 4 5']

 

komentarz 14 lutego 2018 przez Benek Szeryf (91,010 p.)

Sprawdź sobie, uruchamiając CLI Pythona. Ja otrzymałem:

ValueError: invalid literal for int() with base 10: ' '

 

1
komentarz 14 lutego 2018 przez kwantyfikator Nowicjusz (100 p.)
edycja 14 lutego 2018 przez kwantyfikator

funkcja split() tworzy listę elementów typu string rozdzielając dane wejściowe tam, gdzie występuje znak spacji (domyślnie). A pętla for w tym zapisie dotyczy tego co jest po lewej stronie czyli powtarza instrukcje int(x)

gdyby zapisać to inaczej to pewno wyglądało by to tak:

lista = input().split
tab = []
for x in lista:
  tab.append(int(x))

wtedy tab będzie listą intów

gdyby nie było tej pętli to zmienna lista wyglądała by tak:

['1', '2', '3', '4', '5']

gdyby nie było tego split to tak jak napisałeś otrzymasz zmienną ciągu znaków i dzięki dynamicznemu deklarowaniu zmiennych nie będzie to nawet lista. A takiej zmiennej ze spacjami nie da się zamienić na int i stąd ten błąd. 

Pętla zacznie się wykonywać po wprowadzeniu danych przez instrukcje input() czyli po znaku enter

ten zapis nazywa się list comprehension

komentarz 15 lutego 2018 przez 1mSnajper Początkujący (300 p.)
Ok, dziękuję Wszystkim za pomoc w tej kwestii :) Teraz Python wydaje się o wiele prostszy i przyjemniejszy.

Podobne pytania

0 głosów
1 odpowiedź 135 wizyt
pytanie zadane 9 kwietnia 2017 w Python przez Gdzieniegdzie Nowicjusz (120 p.)
0 głosów
1 odpowiedź 351 wizyt
pytanie zadane 30 października 2020 w Python przez reaktywny Nałogowiec (40,990 p.)
0 głosów
1 odpowiedź 186 wizyt
pytanie zadane 24 października 2019 w JavaScript przez kordix Gaduła (3,910 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...