首页 > 解决方案 > 在元组中交换元素 - 足球日历生成器

问题描述

这是我的代码:

        n = int(len(teams_names) / 2)

    rounds = []
    for i in range(len(teams_names) - 1):
        t = teams_names[:1] + teams_names[-i:] + teams_names[1:-i] if i else teams_names
        rounds.append(list(zip(t[:n], reversed(t[n:]))))
    one_round_length = len(rounds)
    list(rounds)
    for i in range(len(rounds)):
        one_round = rounds[one_round_length-i-1]
        for j in range(len(one_round)):
            one_round[j][0], one_round[j][1] = one_round[j][1], one_round[j][0] 
        rounds.append(one_round)

但我有 TypeError: 'tuple' object does not support item assignment in the line:

            one_round[j][0], one_round[j][1] = one_round[j][1], one_round[j][0] 

代码是创建足球比赛日历。在第一个“回合”中,创建团队的随机对。在第二个“回合”中,我想反转主客团队对。

例如,没有反向我有:

[('Atletico Madrid', 'Sevilla FC'), ('Villareal CF', 'Athletic Club')]
[('Atletico Madrid', 'Villareal CF'), ('Sevilla FC', 'Athletic Club')]
[('Atletico Madrid', 'Athletic Club'), ('Sevilla FC', Villareal CF')]

[('Atletico Madrid', 'Athletic Club'), ('Sevilla FC', Villareal CF')]
[('Atletico Madrid', 'Villareal CF'), ('Sevilla FC', 'Athletic Club')]
[('Atletico Madrid', 'Sevilla FC'), ('Villareal CF', 'Athletic Club')]

我希望有:

[('Atletico Madrid', 'Sevilla FC'), ('Villareal CF', 'Athletic Club')]
[('Atletico Madrid', 'Villareal CF'), ('Sevilla FC', 'Athletic Club')]
[('Atletico Madrid', 'Athletic Club'), ('Sevilla FC', Villareal CF')]

[('Athletic Club', 'Atletico Madrid'), ('Villareal CF', Sevilla FC')]
[('Villareal CF', 'Atletico Madrid'), ('Athletic Club', 'Sevilla FC')]
[('Sevilla FC', 'Atletico Madrid'), ('Athletic Club', 'Sevilla FC')]

标签: pythonlisttuples

解决方案


如果您有以下列表

rounds = [
('Atletico Madrid', 'Sevilla FC'), ('Villareal CF', 'Athletic Club'),
('Atletico Madrid', 'Villareal CF'), ('Sevilla FC', 'Athletic Club'),
('Atletico Madrid', 'Athletic Club'), ('Sevilla FC', 'Villareal CF'),
('Atletico Madrid', 'Athletic Club'), ('Sevilla FC', 'Villareal CF'),
('Atletico Madrid', 'Villareal CF'), ('Sevilla FC', 'Athletic Club'),
('Atletico Madrid', 'Sevilla FC'), ('Villareal CF', 'Athletic Club')]

应用以下代码并打印

reversed_rounds = [(y,x) for x,y in rounds]
print(reversed_rounds)

输出:

[('Sevilla FC', 'Atletico Madrid'), ('Athletic Club', 'Villareal CF'), 
('Villareal CF', 'Atletico Madrid'), ('Athletic Club', 'Sevilla FC'), 
('Athletic Club', 'Atletico Madrid'), ('Villareal CF', 'Sevilla FC'), 
('Athletic Club', 'Atletico Madrid'), ('Villareal CF', 'Sevilla FC'), 
('Villareal CF', 'Atletico Madrid'), 'Athletic Club', 'Sevilla FC'), 
('Sevilla FC', 'Atletico Madrid'), ('Athletic Club', 'Villareal CF')]

或者

试试下面的一个来得到你想要的

rounds = [
    [('Atletico Madrid', 'Sevilla FC'), ('Villareal CF', 'Athletic Club')],
    [('Atletico Madrid', 'Villareal CF'), ('Sevilla FC', 'Athletic Club')],
    [('Atletico Madrid', 'Athletic Club'), ('Sevilla FC', 'Villareal CF')],
    [('Atletico Madrid', 'Athletic Club'), ('Sevilla FC', 'Villareal CF')],
    [('Atletico Madrid', 'Villareal CF'), ('Sevilla FC', 'Athletic Club')],
    [('Atletico Madrid', 'Sevilla FC'), ('Villareal CF', 'Athletic Club')]
]

final_list = []
for li in rounds:
    inner_list=[]
    for tup in li:
        x,y = tup
        inner_list.append((y,x))
    final_list.append(inner_list)

for item in final_list:
    print(item)

输出:

[('Sevilla FC', 'Atletico Madrid'), ('Athletic Club', 'Villareal CF')]
[('Villareal CF', 'Atletico Madrid'), ('Athletic Club', 'Sevilla FC')]
[('Athletic Club', 'Atletico Madrid'), ('Villareal CF', 'Sevilla FC')]
[('Athletic Club', 'Atletico Madrid'), ('Villareal CF', 'Sevilla FC')]
[('Villareal CF', 'Atletico Madrid'), ('Athletic Club', 'Sevilla FC')]
[('Sevilla FC', 'Atletico Madrid'), ('Athletic Club', 'Villareal CF')]

推荐阅读