Python:用函数替换for循环

2024-04-20 07:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有谁能帮助我理解如何用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'))

输出如下:

^{pr2}$

Tags: 函数indfforcountrecordwinteam
2条回答

实际上,你把东西混在一起-functions只是聚合代码行,这样它们就可以不必再写任何东西了,而for-loops是为了迭代的目的。在

在上面提到的例子中,一个函数只包含for-loop并返回结果数据帧,然后可以使用它。但它不会改变任何东西,也不会让你的代码更聪明。在

解决方案

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和{}的所有实例。在

现在,您调用的函数将用您发送给它的任何输入来替换somethingsomething_else的所有出现。在

另外,我也不完全确定涉及x = y = i的语句,以及它能完成什么,或者它是否是一个有效的语句?在

相关问题 更多 >