【问题标题】:How is a list appending data when I am assigning it back to empty at the start of each loop iteration当我在每次循环迭代开始时将列表分配回空时,列表如何附加数据
【发布时间】:2021-08-17 05:57:51
【问题描述】:

此代码块从 API 中提取数据作为字典,fields 是我们要为其查找值的键的列表。在函数getTeamData 中,它通过API 数据创建teams_list,这是返回值。嵌套的 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))

【问题讨论】:

  • 首先,return 语句是否存在缩进问题?它似乎在第一个 i 循环结束时返回。
  • 这是我从浏览器查看的格式,返回不应该在循环内
  • 您能否发布一个示例“团队”字典供我们运行该函数并调试您的代码?
  • 我看不出这是如何工作的,但请注意 append() 只会将一个元素添加到列表中。要包含整个列表,请使用 extend()

标签: python list loops dictionary


【解决方案1】:

我已经对齐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

【讨论】:

    【解决方案2】:

    然后我们将temp_list 附加到teams_list 我们仍然得到预期 结果。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2021-12-14
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多