Python: заменить цикл с функцией - PullRequest
0 голосов
/ 28 августа 2018

Может кто-нибудь помочь мне понять, как создать функцию с def whatever() вместо использования цикла for. Я пытаюсь сделать что-то более Pythonical, но не совсем понимаю, как правильно применять функцию вместо цикла. Например, у меня есть цикл ниже, который работает хорошо и дает вывод, который я хотел бы, есть ли способ сделать это с помощью функции?

seasons = leaguesFinal['season'].unique()
teams = teamsDF['team_long_name'].unique()
df = []

for i in seasons:
    season = leaguesFinal['season'] == i
    season = leaguesFinal[season]
    for j in teams:
        team_season_wins = season['win'] == j
        team_season_win_record = team_season_wins[team_season_wins].count()
        team_season_loss = season['loss'] == j
        team_season_loss_record = team_season_loss[team_season_loss].count()
        df.append((j, i, team_season_win_record, team_season_loss_record))
df = pd.DataFrame(df, columns=('Team', 'Seasons', 'Wins', 'Losses'))

Вывод выглядит следующим образом:

      Team               Seasons    Wins    Losses
0   KRC Genk            2008/2009   15       14
1   Beerschot AC        2008/2009   11       14
2   SV Zulte-Waregem    2008/2009   16       11
3   Sporting Lokeren    2008/2009   13        9
4   KSV Cercle Brugge   2008/2009   14       15

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Решение

def some_loop(something, something_else):
    for i in something:
        season = leaguesFinal['sesaon'] == i
        season = leaguesFinal[season]
        for j in something_else:
            team_season_wins = season['win'] == j
            team_season_win_record = team_season_wins[team_season_wins].count()
            team_season_loss = season['loss'] == j
            team_season_loss_record = team_season_loss[team_season_loss].count()
            df.append((j, i, team_season_win_record, team_season_loss_record))

some_loop(seasons, teams)

Комментарии

Это то, что вы упоминаете, создавая функцию из цикла for, хотя у вас все еще есть цикл for в функции, которую можно использовать в различных областях кода без повторного использования всего кода. для петли.

Все, что нужно, - это определить функцию, которая принимает две переменные для этого конкретного цикла, которые будут def some_loop(something, something_else), я использовал базовое именование, чтобы вы могли видеть более ясные события.

Тогда вы бы заменили все экземпляры seasons и teams на эти переменные.

Теперь вы вызываете вашу функцию и замените все вхождения something и something_else на любые входные данные, которые вы ей отправите.

Кроме того, я не совсем уверен в заявлениях, которые включают x = y = i, и к чему это приводит, или если это даже допустимое утверждение?

0 голосов
/ 28 августа 2018

фактически вы смешиваете вещи - functions просто агрегирует строки кода и, таким образом, делает их воспроизводимыми без повторной записи, тогда как for-loops для итерационных целей.

В приведенном выше примере функция просто содержит for-loop и возвращает результирующий фрейм данных, который вы затем можете использовать. но это ничего не изменит и не сделает ваш код умнее.

...