首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何执行Python循环中迭代的元素之和

如何执行Python循环中迭代的元素之和
EN

Stack Overflow用户
提问于 2015-07-09 13:43:42
回答 3查看 2.6K关注 0票数 1

我对Python非常陌生,而且在理解它的逻辑工作方式方面也遇到了麻烦。我试图构建一个简单的代码,给出两个列表,找出每个列表之间的差异,并返回最小差异的平均值。

假设我有两份清单:

代码语言:javascript
复制
list1=[1, 4, 10]
list2=[2, 3, 6]

使用下面的代码,我可以用第二个列表的编号来迭代第一个列表的编号:

代码语言:javascript
复制
for x in list1:

   diff=[abs(y-x) for y in list2]
   print (diff)

[1, 2, 5] # that is, 1-2, 1-3 and 1-6
[2, 1, 2] # that is, 4-2, 4-3 and 4-6
[8, 7, 4] # that is, 10-2, 10-3, 10-6

通过下面的代码,我可以在每次迭代中找到最小的差异:

代码语言:javascript
复制
for x in list1:

   diff=[abs(y-x) for y in list2]
   mindiff=min(int(s) for s in diff)

   print (mindiff)

1 
1 
4 

我也没意见。现在,我想把所有的最小差加起来,除以我计算出来的差的数目。这是我不明白的部分。换句话说,我如何构建一个函数来总结for循环所做的所有迭代?在此之后,(在本例中为6 (1+1+4)),我可以轻松地将list2的最大范围的差异之和除以。

我该怎么做呢?

提前谢谢你的回答

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-09 14:23:56

下面的代码可能会帮助您解决问题。

代码语言:javascript
复制
list1=[1, 4, 10]
list2=[2, 3, 6]

n = len(list2)
sum_min = 0

for x in list1:

    diff=[abs(y-x) for y in list2]
    mindiff=min(int(s) for s in diff)

    sum_min += mindiff  # iterating will keep on adding min of differences 1 + 1 + 4

    print (mindiff)

print(sum_min/n)  # mean minimum difference

我认为,为了计算列表中最小差异的平均值,您需要将最小差异的总和除以每组中的差异数(即list2长度)。如果你想修改代码,我想你已经知道了怎么做。

票数 1
EN

Stack Overflow用户

发布于 2015-07-09 13:51:51

代码语言:javascript
复制
list1=[1, 4, 10]
list2=[2, 3, 6]

sumOfMinDiffs = 0 # Initialize the sum value to start out at zero

for x in list1:

   diff=[abs(y-x) for y in list2]
   mindiff=min(int(s) for s in diff)
   print (mindiff)

   sumOfMinDiffs += mindiff # Keep track of the sum


maximumRangeOfList2 = max(list2) - min(list2) # I think this is what you mean by "maximum range of list 2"

print(sumOfMinDiffs/maximumRangeOfList2) # Tah dah, this is your answer
# print(sumOfMinDiffs/len(list2)) # This is your answer if you just want to divide by the length of list2

上述代码用于执行以下操作:

  • 在循环之外保留一个和变量,并在每个循环上增加它。
  • 在for循环的末尾,计算“列表2的最大范围”,并将其存储在一个变量中。
  • 对于您的最终答案,只需将和变量除以范围变量即可。
票数 2
EN

Stack Overflow用户

发布于 2015-07-09 13:56:19

我认为您可以在for循环之外使用一个变量来实现您想要的结果,将每个迭代的值和一个计算迭代次数的变量相加。

代码语言:javascript
复制
list1=[1, 4, 10]
list2=[2, 3, 6]


min_sum = 0
n = 0
for x in list1:

    diff=[abs(y-x) for y in list2]
    mindiff=min(int(s) for s in diff)
    min_sum += mindiff
    n+=1

    print (mindiff)

print(min_sum/n)

希望它能帮上忙

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31319369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档