如何在python列表中的集合中添加项目?

时间:2019-04-10 20:41:26

标签: python list set

将项目添加到列表中的集合时,我得到了意外的结果,这样我可以通过索引列表来指定我需要的集合,如以下代码所示:

def get_friends_of_users(network):
    f1 = lambda x: x[0]
    f2 = lambda x: x[1]
    users_friends = [set()] * max(max(network, key=f1)[0], max(network, key=f2)[1]+1)
    net_users = set()
    for i in network:
        users_friends[i[0]].add(i[1])
        users_friends[i[1]].add(i[0])
        net_users.add(i[0])
        net_users.add(i[1])
        #print(users_friends)
    return net_users, users_friends

让可变网络成为以下元组列表:

network = [(3, 5), (2, 1), (2, 4), (1, 5), (5, 0), (3, 2), (3, 0)] 将用户及其朋友描述为(user_ID,friend_ID)。

我希望变量users_friends是每个用户的所有朋友的集合的列表,如下所示:

用户ID = 0的ID为3、5的朋友

用户ID = 1的ID为2、5的朋友

用户ID = 2的朋友的ID为1、3、4

用户ID = 3的朋友的ID为0、2、5

用户ID = 4的朋友的ID = 2

用户ID = 5的朋友的ID为0、1、3。

但是当我取消注释代码中的print语句时,我可以看到,每次执行语句users_friends[i[0]].add(i[1])users_friends[i[1]].add(i[0])时,它都会将该项目添加到列表中的所有集合中。

所以,这是输出:

[{3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}]

[{1, 2, 3, 5}, {1, 2, 3, 5}, {1, 2, 3, 5}, {1, 2, 3, 5}, {1, 2, 3, 5}, {1, 2, 3, 5}]

[{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}]

[{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}]

[{0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}]

[{0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}]

[{0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5}]

我的问题是:为什么将项目添加到列表中的所有集合中,以及如何通过索引这些集合的列表将其添加到我指定的集合中?

0 个答案:

没有答案