尝试将列表A中的项目与列表B中的项目进行比较,然后返回第三个列表

时间:2018-11-17 12:36:18

标签: python python-3.x

我是python的新手。我在互联网上搜索了答案,但是,似乎无法使解决方案起作用。我正在尝试使用嵌套循环比较列表中的项目(用于练习)。每当列表A (num_list)中的项目大于列表B (value_list)时,我希望计数器上升并最终返回一个列表,其中该计数器除以某些东西。 目前,我得到的错误是:

  

布尔对象不可迭代。

经过一些调整,我得到了:

  

索引超出范围

即使我将其定义为最长列表的范围。我不知道为什么代码不起作用,所以我希望提供帮助! 谢谢!!

for i in num_list:
    for j in value_list in range(1, len(num_list)):
        counter = 0
        while value_list[j] >= num_list[i]:
            counter += 1
        result = counter / len(num_list)
        distribution.append(result)

1 个答案:

答案 0 :(得分:0)

您用索引错误地输入了值,并在代码中出现了可能的无穷循环。

while value_list[j] >= num_list[i]: 
    counter += 1 

您没有更改会改变while-条件的任何内容,因此它不会进入或永远不会离开。

您的固定代码:

nums= [1,2,3,4,5,6]
vals= [-1,0,2,5,7,99]
dist = []
for i in nums:      # no need to index into lists, simply use the values
    counter = 0
    for j in vals:
        if i < j:
            counter += 1
    result = counter / len(nums)
    distribution.append(result)

print(dist) # [0.6666666666666666, 0.6666666666666666, 0.5, 0.5, 0.5, 0.3333333333333333]

您可以通过创建子列表来解决您的问题,这些子列表仅在值大于或等于当前vals的情况下才从n提取:

nums= [1,2,3,4,5,6]
vals= [-1,0,2,5,7,99]

result = []

for n in nums:
    result.append((n, [x for x in vals if x >= n]) ) #add a tuple of (n, [bigger values])

print(result)

输出:

[(1, [2, 5, 7, 99]), (2, [2, 5, 7, 99]), (3, [5, 7, 99]), 
 (4, [5, 7, 99]),    (5, [5, 7, 99]),    (6, [7, 99])]

并对此进行操作:

l = len(nums)
# calculate each lists length / length of nums
k = [ len(x[1]) / l for x in result]
print(k)

输出:

[0.6666666666666666, 0.6666666666666666, 0.5, 0.5, 0.5, 0.3333333333333333]