Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ?如何制作二维矩阵_Python - Fatal编程技术网

Python ?如何制作二维矩阵

Python ?如何制作二维矩阵,python,Python,我有一本字典和一个元组 students = { 0: "Nynke", 1: "Lolle", 2: "Jikke", 3: "Popke", 4: "Teake", 5: "Lieuwe", 6: "Tsjabbe", 7: "Klaske", 8: "Ypke", 9: "Lobke"} friendships = [(0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (3, 4), (4, 5), (5, 6), (5, 7), (6, 8), (7, 8

我有一本字典和一个元组

 students = { 0: "Nynke", 1: "Lolle", 2: "Jikke", 3: "Popke", 4: "Teake", 5:
"Lieuwe", 6: "Tsjabbe", 7: "Klaske", 8: "Ypke", 9: "Lobke"}

friendships = [(0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (3, 4), (4, 5), (5,
6), (5, 7), (6, 8), (7, 8), (8, 9)]
我首先要做的是一个二维矩阵,其中每个学生都有一个朋友列表,比如:[[1,2],[0,2,3],…,[8]]

第二件事是我必须根据我必须打印的朋友数量对列表进行排序,如:[9,1,0,2,…,8,3]。 数字9只有一个朋友,数字0有两个朋友等等

我的代码:

for i in students:
    for x in friendships:
        if students[i] == friendships(x):
            new_list.append(x)
    print(i)

我不能百分之百肯定我完全理解你的意图,所以如果我有错误的想法,请纠正我。但我是这么想的

首先,你可以试着创建一本字典来储存每一段友谊

all_friends = {}
for f in friendships:
   if f[0] in all_friends:
      all_friends[f[0]] = all_friends[f[0]] + [f[1]]
   else:
      all_friends[f[0]] = [f[1]]
然后,您需要获取此字典值的列表,这将是您的2d矩阵:

all_friends.values()
对于第二个问题,你首先需要记录每个人有多少友谊,试试字典

friendships_dict = {}
for f in friendships:
   if f[0] in friendships_dict{}:
      friendships_dict[f[0]] = friendships_dict[f[0]] + 1
   else:
      friendships_dict[f[0]] = 1
然后,您需要将其作为可以排序的元组列表:

friends_list = [(f1, f2) for f1, f2 in friendships_dict.iteritems()]

sorted_friends_list = sorted(friends_list, key=lambda x: x[1])
编辑

现在我更好地理解了你问题的第一部分,让我继续尝试提供一个解决方案

您仍然需要我包含的第一段代码:

all_friends = {}
for f in friendships:
   if f[0] in all_friends:
      all_friends[f[0]] = all_friends[f[0]] + [f[1]]
   else:
      all_friends[f[0]] = [f[1]]
然后添加以下内容:

matrix = [] 
for key in sorted(all_friends.iterkeys()):
    matrix.append(all_friends[key])

矩阵将是您想要的

看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是包括您迄今为止编写的代码、示例输入(如果有)、预期输出以及您实际获得的输出、回溯等。。你提供的细节越多,你可能得到的答案就越多。检查and。你的意思是,在生成的二维矩阵中,每个内部列表的第一个值是一个学生的人数,其余的值是该学生的直接朋友的学生人数吗?@RoryDaulton否,它说数字0有1和2作为朋友,数字1将数字0,2,3作为朋友,然后继续…对于第一个,我想创建一个包含[[1,2]、[0,2,3]、…、[8]]的列表。但是我被卡住了。我想我使用了错误的方法。你能解释一下这个列表的含义吗?它说数字0有1和2作为朋友,数字1有数字0,2,3作为朋友。它打印出来:0 1 2 3 4 6 7 8 9但是iterkeys是什么?