任何人都可以帮助我了解如何使用def whatever()
创建函数而不是使用for循环。我正在尝试以Python的方式做更多的事情,但并不太了解如何很好地应用函数而不是循环。例如,我下面有一个循环,可以很好地运行并给出我想要的输出,是否可以通过函数来实现?
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
答案 0 :(得分:0)
实际上,您混在一起了-functions
仅聚合代码行,从而使它们可重现,而无需再次编写所有内容,而for-loops
仅用于迭代目的。
在上述示例中,一个函数将只包含for-loop
并返回结果数据帧,然后可以使用该数据帧。但它不会改变任何内容或使您的代码更智能。
答案 1 :(得分:0)
解决方案
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
的语句及其作用是什么,或者甚至是有效的语句?