Wejście:
['mia', 5, 10]
['mia', 20, 50]
['mia', 52, 101]
['mia', 220, 380]
Mój kod (który działa, ale chciałbym go zautomatyzować bez pisania {x0}} ręcznie):
print lines[1][1] - lines[0][2]
print lines[2][1] - lines[1][2]
Wynik:
10
2
119
Aby zautomatyzować ten proces drukowania, próbowałem użyć Loop for
:
for x in lines:
print lines[x][1] - lines[x-1][2]
I otrzymał błąd: TypeError: list indices must be integers, not list
Potem spróbowałem:
for int(x) in lines:
print lines[int(x)][1] - lines[int(x)-1][2]
I otrzymał błąd: SyntaxError: can't assign to function call
Zbadałem Odejmowanie wartości ze wszystkich elementów listy 2D w Pythonie ale nie pomogła mi zrozumieć mojego problemu.
Każda pomoc jest doceniana, aby uzyskać zautomatyzowany proces arytmetyczny (albo za pomocą pętli for
, więc mogę zrozumieć, jak mogłem poprawić mój kod powyżej lub inną strukturę). Punkty bonusowe za pokazanie, jak zdefiniować funkcję lub utworzyć definicję klasy, aby wykonać to zadanie.
4 odpowiedzi
W pierwszym przypadku x in lines
oznacza x
przyjmuje wartość każdej linii. I.e., pierwszy x = ['mia', 5, 10]
, a następnie x = ['mia', 20, 50]
... to nie jest to, czego chcesz. Chcesz x = 0
, x = 1
...
Ale próbując po prostu wykonać x
w liczbę całkowitą, pisząc {X1}}, co mówisz, jest na pierwszej iteracji pętli przypisać {x2}} do int(x)
i tak dalej. Ale po lewej stronie jest wywołanie funkcji, co oznacza x
i przekonwertuj go na int
i nie można przypisać czegoś (listy w tym przypadku) do połączenia funkcyjnego.
To, co naprawdę chcesz zrobić, to zmienić prawą stronę twojego zapętlenia. Zamiast przejść przez listę Elementy , chcesz przejść przez indeksy .
for x in range(1,len(lines)):
print lines[x][1] - lines[x-1][2]
Spróbuj tego, po prostu połączenie pętli umieszczonej w instrukcji drukowania dla wywołania
print '\n'.join(str(lines[x][1]-lines[x-1][2]) for x in xrange(1,len(lines)))
Możesz także szalony bez użycia range
dla wskaźników:
for (first, second) in zip(lines[:-1], lines[1:]):
print second[1] - first[2]
zip
lub {X1}} (istnieją niewielkie różnice w Python2) Utwórz Kto Płaskie ze wszystkich iterów, które są podane . Z Dokumentów:
Ta funkcja [ ZIP Zwraca listę Ktorek, gdzie krotka I-TH zawiera element I-T z każdej z sekwencji argumentów lub iterables.
Ponieważ zagwarantowane jest kolejność list, przyniesie to przesunięcie elementów przez wprowadzone plastry.
Tutaj pierwsze iterable jest wszystkie linie bez ostatniego, a drugi iterable to wszystkie linie z wyłączeniem pierwszego (indeksu 0).
Powinieneś zrobić :
for x in range(1,len(lines)):
#do something
Spowoduje to pętlę z 1
do len(lines) - 1
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.