在每次循环迭代开始时,当我将列表重新分配为空时,列表是如何附加数据的



此代码块从API获取数据作为dict,fields是我们要查找值的键的列表。在函数getTeamData中,它通过作为返回值的创建teams_list的API数据。嵌套的for循环在每个索引处对dict进行迭代,并将每个值存储在temp_list中。

在嵌套的for循环中,我会将找到的每个值附加到temp_list中,以创建一个临时列表。这就是我断开连接的地方,当内部循环完成时,我们清空temp_list,但当我们将temp_list附加到teams_list时,我们仍然得到预期的结果。

我唯一能想到但仍然不太明白的是,由于我们没有从temp_list中删除数据,只是将引用更改为一个空列表,不知何故,数据仍然被某些东西保留着?

import statsapi
# Stores Team data as dict
teams = statsapi.get('teams', {'sportIds': 1})['teams']
# List of keys' values we are trying to retreive 
fields = ['id', 'name', 'abbreviation', 'teamName', 'locationName', 'firstYearOfPlay']

# iterates over the team dict and pulls pre-defined values based on fields list
def getTeamData(dict):
teams_list = list()
for i in range(len(dict)):
print("temp list emptied")
temp_list = []
print(temp_list)
print("adding temp list to teams_list")
teams_list.append(temp_list)
print(teams_list)
for k in range(len(fields)):
print("adding value to temp list")
temp_list.append(str(dict[i].get(fields[k])))
print(temp_list)
return teams_list

print(getTeamData(teams))

然后我们将temp_list附加到teams_list,我们仍然得到预期的后果

您仍然可以得到预期的结果,因为当您将temp_list附加到teams_list时,您将附加对temp_list的引用。因此,当对temp_list进行改变时,它也反映在teams_list中。从您的代码来看,您似乎正在对for k in range(len(fields)):循环中的temp_list进行更改。

有关如何解决此问题的更多信息(如果需要(,请查看此答案。这个答案也可能有助于理解python中的引用。

我已经对齐了return行,并将一些代码,特别是teams_list.append(temp_list)重新排列到逻辑位置

这行得通吗?

def getTeamData(dic):
teams_list = []
for i in range(len(dic)):
print("temp list emptied")
temp_list = []
print(temp_list)
for k in range(len(fields)):
print("adding value to temp list")
temp_list.append(str(dict[i].get(fields[k])))
print(temp_list)
print("adding temp list to teams_list")
teams_list.append(temp_list)
print(teams_list)
return teams_list

最新更新