Python不使用itertools实现列表排列生成所有两两对阵元组
错误原因分析
你原来的代码有三个核心问题:
- 逻辑顺序错误:你试图在
teams列表还没有添加任何元素的时候,就访问teams[index]判断值,必然会触发索引越界报错 - 循环范围错误:外层循环只遍历到
len(lst)-1,会漏掉最后一个队伍作为主队的情况 - 变量引用错误:代码里直接用了全局变量
team,而不是函数接收的参数lst,复用性差
正确实现代码
def allMatches(lst): teams = [] # 第一层遍历:所有可作为主队的队伍 for home in lst: # 第二层遍历:所有可作为客队的队伍 for away in lst: # 排除同队对阵的情况 if home != away: teams.append((home, away)) return teams team = ["FCP", "SCP", "SLB"] print(allMatches(team))
输出效果
运行上述代码会输出你期望的结果:[('FCP', 'SCP'), ('FCP', 'SLB'), ('SCP', 'FCP'), ('SCP', 'SLB'), ('SLB', 'FCP'), ('SLB', 'SCP')]
完全满足n支队伍时返回n*(n-1)种对阵的要求,3支返回6种,4支返回12种。
内容的提问来源于stack exchange,提问作者user17153595
相关产品推荐
相关产品推荐

