how do I perform the following function for a given list, using python

Question:

for any given list I need output as shown below

l1 = [2,3,4]

output  = [2*3+ 3*4 + 4*2] = [26]

similarly 

l2 = [3,4,5,7,8,3]

output = [3*4 + 4*5 + 5*7 + 7*8 + 8*3 + 3*3] = [156]

The length of the list is dynamic and so could go up to 100, and the code needs to dynamically do the calculations based on the length of the list.

Appreciate any help.

Asked By: TRex

||

Answers:

Rotate the list by appending the first element to a slice of everything after the first element; then zip the original list with the rotated list. Use sum to generate the actual numeric sum, and str.join with f-strings to generate the rest of the output.

>>> def rot_sum(nums):
...     rot_nums = list(zip(nums, nums[1:] + [nums[0]]))
...     return f"[{' + '.join(f'{a}*{b}' for a, b in rot_nums)}] = [{sum(a * b for a, b in rot_nums)}]"
...
>>> rot_sum([2, 3, 4])
'[2*3 + 3*4 + 4*2] = [26]'
>>> rot_sum([3,4,5,7,8,3])
'[3*4 + 4*5 + 5*7 + 7*8 + 8*3 + 3*3] = [156]'
Answered By: Samwise

Simple solution. Works for me !!!

def fun(l):
    sum=0
    for i in range(len(l)-1):
        sum += l[i]*l[i+1]
    sum += l[0]*l[-1]
    return sum
Answered By: Bharat Adhikari
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.