Instrukcje warunkowe na listach

0

Witam
Obecnie uczę się od podstaw pythona. Próbuje na róznych przykładach i jest fajnie. Próbowałem sobie importować dane z excela i robić na nich podstawowe operacje jak w excelu. Wyłożyłem się na instrukcji warunkowej jak excelowa suma jeżeli.

Zakładamy ,że mam dwie listy dr i gole. Chciałbym zsumować listę gole ale tylko pod warunkiem wystąpienia w liście przykładowo "mu"

dr = ['ars', 'city', 'mu', 'toten','ars', 'city', 'mu', 'toten']
gole = [1,1,0,3,2,1,1,1]

Jak szukałem w wątkach zawsze jest wyszukiwanie na liście elementu dodawanie usuwanie go ,a nigdzie nie widziałem instrukcji jak z excela.

Czy mógłbym prosić o jakieś źródło ,gdzie odnajdę podstawowe operacje działania na listach z wykorzystaniem instrukcji warunkowych czy pętli. Również byłym zainteresowany takim porównaniem jak funkcja excela i jej odpowiednik w języku Python. Zainteresowałbym się działaniami na listach czy macierzach jak zsumowanie warunkowe ,wyszukiwanie warunkowe jak w funkcji jeżeli > wyrażenie występuję na liśćie > zwraca wartość prawda całej listy a nie tylko pierwszego wyrażenia.

To tylko jeden z przykładów ,ale liczę na wyrozumiałość.
Dziękuję za zainteresowanie.

Pozdrawiam.

3

W dokumentacji Pythona masz wszystko fajnie opisane: https://docs.python.org/3/tutorial/datastructures.html#more-on-lists
Masz jeszcze wbudowane funkcje samego Pythona które operują na przykład na kolekcjach. sum() do sumowania listy: https://docs.python.org/3/library/functions.html#sum
No i ogólnie poczytaj o Ifach (czyli warunkach) https://docs.python.org/3/tutorial/controlflow.html#if-statements
Oraz pętlach: https://docs.python.org/3/tutorial/controlflow.html#for-statements

1

Ja w tym przypadku iterowałbym po obydwu listach licząc sumę.
Rozwiązanie nie będzie wyglądać jak w Excelu, bo logikę formuły trzeba przełożyć na zupełnie inne środowisko.

dr = ['ars', 'city', 'mu', 'toten','ars', 'city', 'mu', 'toten']
gole = [1,1,0,3,2,1,1,1]

suma = 0

for dr_item, gole_item in zip(dr, gole):
	if dr_item == 'mu':
		suma += gole_item

print(suma)

Nie wiem, czy do Pythona są gotowe funkcje, które by np. sumowały warunkowo.

Jeśli nie ma, to możesz sam je napisać. Warunek przyjmowałyby w postaci wyrażeń lambda, podanych jako argument funkcji.

51
sum_goals = lambda z: sum(gole[x] for x in (i for i, _ in enumerate(dr) if dr[i] == z))

Gotowe funkcje do wyciągania indexów, czy agregacji ma numpy. IMO to przerost formy nad treścią w przypadku małych ilości danych.

3

@Konrado777: zobacz bibliotekę pandas:.
https://pandas.pydata.org/
Tam może być coś takiego.

1

można użyć funkcji compress:

from itertools import compress
# ...
print(sum(compress(gole, [a == 'mu' for a in dr])))

https://docs.python.org/3/library/itertools.html#itertools.compress

1
Konrado777 napisał(a):

Wyłożyłem się na instrukcji warunkowej jak excelowa suma jeżeli.

...

Jak szukałem w wątkach zawsze jest wyszukiwanie na liście elementu dodawanie usuwanie go ,a nigdzie nie widziałem instrukcji jak z excela.

Czy mógłbym prosić o jakieś źródło ,gdzie odnajdę podstawowe operacje działania na listach z wykorzystaniem instrukcji warunkowych czy pętli. Również byłym zainteresowany takim porównaniem jak funkcja excela i jej odpowiednik w języku Python. Zainteresowałbym się działaniami na listach czy macierzach jak zsumowanie warunkowe ,wyszukiwanie warunkowe jak w funkcji jeżeli > wyrażenie występuję na liśćie > zwraca wartość prawda całej listy a nie tylko pierwszego wyrażenia.

Tak / nie / to zależy.

Podoba mi się, ze coś chcesz, masz ciekawość.

Czy w jednym języku koniecznie należy szukać 1:1 odwzorowania konstruktów z innego? Mam wątpliwości.
Tak jak nie składa się wypowiedzi po angielsku zastępując 1:1 każde słowo polskiego zdania (I'don know whats coman) , tak i w językach programowania.

Iteracje z warunkami robi się inaczej, choć to w sumie jest nastawiona na podobny skutek.
Jakies lambdy, traitsy - tego z kolei w excellu nie ma.

0

Ja chciałbym zauważyć, że nie trzeba przelatywać całej listy tylko wystarczy użyć if "mu" in dr

print(sum(gole) if "mu" in dr else False)
0

@nurek gaminate: Mogło to tak wyglądać w opisie autora wątku, ale tutaj nie chcemy sumować całej listy, tylko wartości odpowiadające "mu" w innej liście.
W Excelu SUMIF właśnie tak działa. Warunek dotyczy odpowiadających sobie komórkom.

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