【问题标题】:using nested loops - for loop使用嵌套循环 - for 循环
【发布时间】:2021-12-11 06:40:44
【问题描述】:

我有 2 个关于使用嵌套循环的问题。

  1. 我正在对 football_match 进行迭代,以创建一个包含每支球队颜色的新列表。到目前为止,我已经
colors = []

for color in soccer_match:
    colors.append(color['colors'])

colors

这给了我 [['blue', 'white', 'red'], ['green', 'gold']]。我如何能够将两个列表合并为一个?我还没有学习列表理解或函数。

  1. 如何遍历 football_match 以创建一个仅包含每支球队队长的列表?我假设我应该使用嵌套的 for 循环来查找 'captain' = True 但不知道如何放置该代码。

这是给定的示例。谢谢!

soccer_match = [
  { "home_team": True,
    "away_team": False,
    "country": "France",
    "num_passes": 484,
    "passes_completed": 423,
    "fouls_committed": 16,
    "colors": ["blue", "white", "red"],
    "players": [
      {
        "name": "Hugo LLORIS",
        "captain": True,
        "shirt_number": 1,
        "position": "Goalie"
      },
      {
        "name": "Benjamin PAVARD",
        "captain": False,
        "shirt_number": 2,
        "position": "Defender"
      },
      {
        "name": "Raphael VARANE",
        "captain": False,
        "shirt_number": 4,
        "position": "Defender"
      },
      {
        "name": "Samuel UMTITI",
        "captain": False,
        "shirt_number": 5,
        "position": "Defender"
      },
      {
        "name": "Paul POGBA",
        "captain": False,
        "shirt_number": 6,
        "position": "Midfield"
      },
      {
        "name": "Antoine GRIEZMANN",
        "captain": False,
        "shirt_number": 7,
        "position": "Forward"
      },
      {
        "name": "Kylian MBAPPE",
        "captain": False,
        "shirt_number": 10,
        "position": "Forward"
      },
      {
        "name": "Ousmane DEMBELE",
        "captain": False,
        "shirt_number": 11,
        "position": "Forward"
      },
      {
        "name": "Corentin TOLISSO",
        "captain": False,
        "shirt_number": 12,
        "position": "Midfield"
      },
      {
        "name": "Ngolo KANTE",
        "captain": False,
        "shirt_number": 13,
        "position": "Midfield"
      },
      {
        "name": "Lucas HERNANDEZ",
        "captain": False,
        "shirt_number": 21,
        "position": "Defender"
      }
    ],
  },
  { "home_team": False,
    "away_team": True,
    "country": "Australia",
    "num_passes": 390,
    "passes_completed": 332,
    "fouls_committed": 19,
    "colors": ["green", "gold"],
    "players": [
      {
        "name": "Mathew RYAN",
        "captain": False,
        "shirt_number": 1,
        "position": "Goalie"
      },
      {
        "name": "Mark MILLIGAN",
        "captain": False,
        "shirt_number": 5,
        "position": "Defender"
      },
      {
        "name": "Mathew LECKIE",
        "captain": False,
        "shirt_number": 7,
        "position": "Forward"
      },
      {
        "name": "Robbie KRUSE",
        "captain": False,
        "shirt_number": 10,
        "position": "Forward"
      },
      {
        "name": "Andrew NABBOUT",
        "captain": False,
        "shirt_number": 11,
        "position": "Forward"
      },
      {
        "name": "Aaron MOOY",
        "captain": False,
        "shirt_number": 13,
        "position": "Midfield"
      },
      {
        "name": "Mile JEDINAK",
        "captain": True,
        "shirt_number": 15,
        "position": "Midfield"
      },
      {
        "name": "Aziz BEHICH",
        "captain": False,
        "shirt_number": 16,
        "position": "Defender"
      },
      {
        "name": "Joshua RISDON",
        "captain": False,
        "shirt_number": 19,
        "position": "Defender"
      },
      {
        "name": "Trent SAINSBURY",
        "captain": False,
        "shirt_number": 20,
        "position": "Defender"
      },
      {
        "name": "Tom ROGIC",
        "captain": False,
        "shirt_number": 23,
        "position": "Midfield"
      }
    ]
  }
]

【问题讨论】:

标签: python nested-loops


【解决方案1】:

colors.append 替换为colors.extend

【讨论】:

    【解决方案2】:

    您应该根据变量所代表的内容来命名变量。在这种情况下,soccer_match 的每个元素都代表一个团队

    现在对于每个团队,team['colors'] 是一个列表。例如,第一队有team['colors'] = ["blue", "white", "red"]。由于您想将此列表的所有元素添加到您的主 colors 列表中,请使用 lst.extend(x) 方法从给定列表 x 中将所有元素添加到当前列表 lstlst.append(x) 将整个列表 x 作为单个元素添加到 lst。见documentation

    要找到队长,请遍历每支球队的所有球员。如果该玩家的'captain' 键是True,则将该玩家附加到captains 列表中。

    colors = []
    captains = []
    
    for team in soccer_match:
        colors.extend(team['colors'])
        for player in team['players']:
            if player['captain']:
                captains.append(player)
    

    【讨论】:

    • 非常感谢,我会将以后的问题保持在 1 个。我有一个次要问题。当循环遍历 team['players'] 时,它是否会自动认为它不应该附加任何带有 'captain' = False 的玩家?
    • @imkusoh 回复。 " 它是否会自动判断它不应该附加任何带有 'captain' = False" 的玩家:不!我们要求它只在player['captain']True 时才执行captains.append(player),因为这就是if 语句的工作方式:该块内的代码只有在条件为真时才会执行。
    猜你喜欢
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多