【问题标题】:Appending list of lists for page rank附加页面排名的列表列表
【发布时间】:2021-04-25 08:14:48
【问题描述】:

我有以下代码用于计算网络的页面排名。我试图通过在 for 循环中创建一个新列表来创建一个列表列表,但是每次使用 i 迭代时,列表都会超出范围。我相信索引错误是针对循环 i 但我不确定如何修改它以获取列表

N =6
nodes=[1, 2, 3, 4, 5, 6]
in_dict = {1: [3], 2: [1, 3], 3: [1], 4: [5, 6], 5: [3, 4], 6: [4, 5]}
k_out = [2, 0, 3, 2, 2, 1]

# initialising page rank of the vectors
pg_rnk0 = []
for i in nodes:
    pg_rnk0.append(1/N)

pg_rnk1 = []
for i in nodes:
    pg_rnk1.append(0)

#Finding the final probability vector
pgR = []
pgR.append(pg_rnk0) 
pgR.append(pg_rnk1)

for i in range(0,N-1):
    for j in range(0,len(pg_rnk0)):
        if j+1 in in_dict:
            for k in in_dict[j+1]:
                if k_out[k-1] != 0:
                    pgR[i+1][j] = pgR[i+1][j] + pgR[i][k-1]/k_out[k-1]
                elif k_out[k-1] == 0:
                    pgR[i+1][j] = pgR[i+1][j] + (1/N)

它给出了这个错误:

line 34, in <module>
    pgR[i+1][j] = pgR[i+1][j] + pgR[i][k-1]/k_out[k-1]

IndexError: list index out of range

【问题讨论】:

    标签: python arrays list dictionary for-loop


    【解决方案1】:
    pgR = []
    pgR.append(pg_rnk0) 
    pgR.append(pg_rnk1
    

    在这里使用append 会将两个列表附加到pgR - pgR 的长度现在是 2。

    pgR[i+1]

    很快就会超过 1(0 索引数组)。

    您可以使用extend 代替使pgR 具有pg_rnk0 和pg_rnk1 的内容,如果这更符合您的意图?

    这是一个例子:

    colors = ["red", "orange", "yellow"]
    fruits = ["apple", "orange", "banana"]
    
    colors_and_fruits = []
    colors_and_fruits.append(colors)
    colors_and_fruits.append(fruits)
    # print(colors_and_fruits) --> [["red", "orange", "yellow"], ["apple", "orange", "banana"]] length: 2
    
    colors_and_fruits = []
    colors_and_fruits.extend(colors)
    colors_and_fruits.extend(fruits)
    # print(colors_and_fruits) --> ["red", "orange", "yellow", "apple", "orange", "banana"] length: 6
    

    【讨论】:

    • 问题是我不想扩展以获取包含所有元素的列表,我想要一个包含 N 个其他列表的列表,这就是我要追加的原因。所以我需要一个列表 [pg_rnk0, pg_rnk[i+1], pg_rnk[i+2], ...] 其中 pg_rnk0, pg_rnk[i+1] 和 pg_rnk[i+2] 都是单独的列表
    • 这是有道理的。但是,我相信你得到的错误是 pgR 本身 - 你试图访问索引 i+1 的 pgR,而 i+1 可以高达 6。pgR 只有 2 个元素因为它目前是用 append 设置的。
    • 我想如果你在最后一个 for 循环之后打印出i+1,你会看到2,然后是错误。
    • 所以我可以用其他 6 个空列表初始化 pgR?我尝试这样做,它消除了错误,但它给了我错误的值而不是我期望的值
    • 您能否用您希望的结果示例更新问题?我认为这会对我和其他人有所帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多