我是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)
答案 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]