如果我犯了任何错误,或者遗漏了任何信息,请道歉,这是我在stackoverflow上的第一个问题。
我正在尝试创建一个python程序,它以循环方式创建fixture。总体规范将是:用户输入团队名称(没有设定团队数量),然后程序创建一个按“周”拆分的字典,或者不同的排列轮换。即第1周(1v2 3v4 5v6),第2周(2v3 4v5 6v1),第3周(3v4 5v6 2v)等。在可能的情况下,任何球队都不会在主场或客场比赛。我知道只有当球队数量/2是偶数时,当奇数球队连续主客场比赛超过两次时,这才是可能的。
我已经编码了个人游戏创建者(即1v2 3v4 5v6等)下面的代码
teams = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
if len(teams) % 2:
teams.append('Rest week')
n = len(teams)
matchs = []
fixtures = []
return_matchs = []
for fixture in range(1, n):
for i in range(n//2):
matchs.append([teams[i], teams[n - 1 - i]])
return_matchs.append([teams[n - 1 - i], teams[i]])
teams.insert(1, teams.pop())
fixtures.insert(len(fixtures)//2, matchs)
fixtures.append(return_matchs)
matchs = []
return_matchs = []我已经创建了一个“团队”列表,但为了便于测试。print(fixtures)时的输出为:
[[['1 v Rest week'], ['2 v 9'], ['3 v 8'], ['4 v 7'], ['5 v 6']], [['1 v 9'], ['Rest week v 8'], ['2 v 7'], ['3 v 6'], ['4 v 5']], [['1 v 8'], ['9 v 7'], ['Rest week v 6'], ['2 v 5'], ['3 v 4']], [['1 v 7'], ['8 v 6'], ['9 v 5'], ['Rest week v 4'], ['2 v 3']] ... cut ...为简洁起见,我将其删节。显然,这段代码是按照我希望的方式工作的,但如果有人有任何建议或建议,我将不胜感激。
我遇到的问题是把这个列表分成一个字典,就像我上面提到的那样。为了便于阅读,我在寻找
[[['1 v Rest week'], ['2 v 9'], ['3 v 8'], ['4 v 7'], ['5 v 6']], [['1 v 9'], ['Rest week v 8'], ['2 v 7'], ['3 v 6'], ['4 v 5']] ...]变成
{week1: [['1 v Rest week'], ['2 v 9'], ['3 v 8'], ['4 v 7'], ['5 v 6']], week2: [['9 v 1'], ['8 v Rest week'], ['7 v 2'], ['6 v 3'], ['5 v 4']] ...} 我所做的是
weekDict = {}
weekDict.update({'week1': fixtures[0]})
weekDict.update(({'week2': fixtures[-1]}))
weekDict.update(({'week3': fixtures[1]}))
weekDict.update(({'week4': fixtures[-2]}))
weekDict.update(({'week5': fixtures[2]}))
...如果团队的数量发生变化,这是非常非常冗长的,也是非常不切实际的。这段代码给出了我想要的输出类型。
{'week1': [['1 v Rest week'], ['2 v 9'], ['3 v 8'], ['4 v 7'], ['5 v 6']],
'week2': [['2 v 1'], ['Rest week v 3'], ['9 v 4'], ['8 v 5'], ['7 v 6']],
'week3': [['1 v 9'], ['Rest week v 8'], ['2 v 7'], ['3 v 6'], ['4 v 5']],
'week4': [['3 v 1'], ['2 v 4'], ['Rest week v 5'], ['9 v 6'], ['8 v 7']],
'week5': [['1 v 8'], ['9 v 7'], ['Rest week v 6'], ['2 v 5'], ['3 v 4']]}它不能做主场和客场,所以在这方面有任何帮助都会很好。有没有更简单的方法来得到我想要的东西?我已经尝试了几个for循环,示例如下
for fixture in fixtures:
weekDict = {}
for i in range(len(fixtures)):
i = 0
num = 1
weekDict.update({'week' + str(num): fixtures[i]})
num += 1
i += 1
print(weekDict)这给了我们
{'week1': [['1', 'Rest week'], ['2', '9'], ['3', '8'], ['4', '7'], ['5', '6']]}我卡住了!有人能帮上忙吗?
提前感谢
罗斯
发布于 2020-06-25 01:36:33
您不需要在fixture上执行第二个循环。你差一点就做到了(保持下去),你只是把for循环弄错了。
weekDict = {}
for ind, fixture in enumerate(fixtures):
weekDict.update({'week'+str(ind+1):fixture})
print(weekDict)https://stackoverflow.com/questions/62559891
复制相似问题