2015-07-09 1 views
1

Я действительно новичок в Python, и я столкнулся с проблемами в понимании того, как работает его логика. Я пытаюсь создать простой код, который, учитывая два списка, находит разницу между каждым числом списков и возвращает среднее значение минимальных различий.Как выполнить сумму элементов, повторяющихся в цикле Python

Скажем, у меня есть эти два списка:

list1=[1, 4, 10] 
list2=[2, 3, 6] 

с кода ниже, я могу перебирать номера первого списка с номерами второй:

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 

со следующими код, я могу найти для каждой итерации минимальную разницу:

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 

И я в порядке с th в. Теперь я хочу суммировать все минимальные различия и делить сумму на количество разностей, которые я вычислил. Здесь приходит часть, которую я не получаю. Другими словами, как я могу построить функцию, которая суммирует все итерации, которые сделал цикл for? После этого (который в этом случае был бы 6 (1 + 1 + 4)), я мог бы легко разделить сумму различий для максимального диапазона списка2.

Как я могу это сделать?

Заранее спасибо за ответы

+2

Что вы подразумеваете под «максимальным диапазоном списка2». Это длина списка2, на которую вы ссылаетесь? –

+0

@KshitijSaraogi Да, это «список2», который определен в первых строках кода. –

ответ

1

Следующий коду может помочь вам решить эту проблему.

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). Если вы хотите изменить код, я думаю, вы поняли, как это сделать.

+0

Благодарим вас за разъяснения. Он сохранил мой код :) –

+1

@ Niccolт Тогда примите ответ;) –

2
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», и сохраните его в переменной
  • Для вашего окончательного ответа просто разделите переменную суммы по переменной диапазона
+0

спасибо, ваше объяснение помогло мне лучше понять логику циклов. –

2

Я думаю, вы можете достичь того, чего хотите, с переменной вне цикла for, добавляя значение каждой итерации и переменной, подсчитывающей количество итераций.

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) 

Надеется, что это помогает

+0

Если я не ошибаюсь, OP хочет разделить на «максимальный диапазон списка2», а не только на длину списка. Я не совсем уверен, что понял, что это значит, но я думаю, что они хотят, чтобы диапазон находился в «максимальном элементе - минимальном элементе».Но, возможно, я ошибаюсь. ¯ \ _ (ツ) _/¯ – 2016rshah

+1

Как один из тегов «означает», я догадался, что он хочет вычислить среднее значение различий. Но да, формулировка неоднозначна, и вы можете быть правы. –

+0

Прошу прощения за мой английский, а также я очень новичок в Python. Я действительно хотел разделить сумму различий на длину второго списка, но я также попробовал решение @GerardAbello, которое интересно. Спасибо вам, ребята! –