नए LIST में दो LISTS के मूल्यों का SUM जोड़ें


135

मेरी निम्नलिखित दो सूचियाँ हैं:

first = [1,2,3,4,5]
second = [6,7,8,9,10]

अब मैं इन दोनों सूचियों में से वस्तुओं को एक नई सूची में जोड़ना चाहता हूं।

आउटपुट होना चाहिए

third = [7,9,11,13,15]

जवाबों:


210

zipसमारोह उपयोगी यहाँ, एक सूची समझ के साथ प्रयोग किया है।

[x + y for x, y in zip(first, second)]

यदि आपके पास सूचियों की सूची है (केवल दो सूचियों के बजाय):

lists_of_lists = [[1, 2, 3], [4, 5, 6]]
[sum(x) for x in zip(*lists_of_lists)]
# -> [5, 7, 9]

1
बस जिज्ञासु कैसे अलग हो जाएगा अगर ज़िप () संभालती है? यानी विभिन्न सरणी लंबाई के लिए जिप रिटर्न क्या है और यह एक्स + वाई के लिए ऑपरेशन को कैसे प्रभावित करेगा
ईगलन

7
@ शेलियन: "ज़िपिंग" तब बंद हो जाता है जब सबसे कम चलने वाला समाप्त हो जाता है। तो अगर firstलंबाई 10 है और secondलंबाई 6 है, तो पुनरावृत्तियों का परिणाम लंबाई 6. होगा
टॉम

मुझे लगता है कि यह अन्य उत्तर की तुलना में अधिक उपयोगी है क्यूज आप उपयोगी सामान ले सकते हैं जैसे औसत ले सकते हैं या सरणी में प्रत्येक तत्वों को अलग-अलग वजन दे सकते हैं और उन्हें जोड़ सकते हैं
seokhoonlee

क्या ऐसा करने का कोई तरीका है जब आप सूचियों की संख्या नहीं जानते हैं?
त्रिगटमोट

@traggatmot: >>> lists_of_lists = [[1, 2, 3], [4, 5, 6]] >>> [sum(x) for x in zip(*lists_of_lists)] [5, 7, 9]
टॉम


27

दोनों सूचियों को मानते हुए aऔर bसमान लंबाई होने पर, आपको ज़िप, सुन्न या कुछ और की आवश्यकता नहीं है।

अजगर 2.x और 3.x:

[a[i]+b[i] for i in range(len(a))]

यह बहुत अच्छा लगता है, अगर हमें 2 से अधिक सूचियों के लिए परिणामी सूची की गणना करनी है
लाजर

25

सुन्न में डिफ़ॉल्ट व्यवहार घटक जोड़ है

import numpy as np
np.add(first, second)

जो आउटपुट देता है

array([7,9,11,13,15])

अब तक का सबसे अच्छा जवाब
इयान

यह काम करना चाहिए, लेकिन मेरे प्रयोगों में ऐसा नहीं है ... मुझे नहीं पता कि क्यों, लेकिन मुझे खौफनाक पुस्तकालय के साथ-साथ एक जटिल पुस्तकालय भी लगता है ...
डिकैडेजा

@decadenza आपने प्रयोग कैसे किया?
अश्फाक

हाय @Ashfaq, कई महीने बीत गए और मैंने बेहतर Numpy लाइब्रेरी सीखी है। मैं np.array परिभाषा में गलत था। माफ़ करना।
डेकाडेजा

np.add (प्रथम, द्वितीय) .tolist () का उपयोग सूची में परिणाम प्राप्त करने के लिए करें
storykeDskobeDa

11

यह स्वयं को किसी भी सूची में विस्तारित करता है:

[sum(sublist) for sublist in itertools.izip(*myListOfLists)]

आपके मामले में, myListOfListsहोगा[first, second]


1
क्या आप इसके बारे में निश्चित हैं izip.from_iterable?
डीएसएम

1
@DSM: लानत है! मुझे लगता है कि मैं सोच रहा था chain। अपडेट किया गया
इंस्पेक्टर जी

9

निम्नलिखित कोड का प्रयास करें:

first = [1, 2, 3, 4]
second = [2, 3, 4, 5]
third = map(sum, zip(first, second))

इस कॉम्पैक्ट और आत्म व्याख्यात्मक समाधान के लिए +1। यह ध्यान देने योग्य है कि यह 2 से अधिक सूचियों के लिए भी काम करता है:map(sum, zip(first, second, third, fourth, ...))
जोहान डेट्टमर

6

ऐसा करने का आसान तरीका और तेज़ तरीका है:

three = [sum(i) for i in zip(first,second)] # [7,9,11,13,15]

वैकल्पिक रूप से, आप numpy राशि का उपयोग कर सकते हैं:

from numpy import sum
three = sum([first,second], axis=0) # array([7,9,11,13,15])

1
यह सामान्य रूप से सूचियों की लंबी सूची के लिए सामान्यीकृत करता है, जो कि बस मेरी जरूरत है!
वेक्टोर्नट



2

मेरा जवाब थिरु के साथ दोहराया जाता है जिसने इसका जवाब 17 मार्च को 9:25 पर दिया।

यह सरल और तेज था, यहां उनके समाधान हैं:

ऐसा करने का आसान तरीका और तेज़ तरीका है:

 three = [sum(i) for i in zip(first,second)] # [7,9,11,13,15]

वैकल्पिक रूप से, आप numpy राशि का उपयोग कर सकते हैं:

 from numpy import sum
 three = sum([first,second], axis=0) # array([7,9,11,13,15])

आपको सुन्न की जरूरत है!

सुन्न सरणी वैक्टर की तरह कुछ ऑपरेशन कर सकता है

import numpy as np
a = [1,2,3,4,5]
b = [6,7,8,9,10]
c = list(np.array(a) + np.array(b))
print c
# [7, 9, 11, 13, 15]

2

यदि आपके पास एक ही लंबाई की अज्ञात संख्या है, तो आप नीचे दिए गए फ़ंक्शन का उपयोग कर सकते हैं।

यहाँ * args सूची तर्कों की एक चर संख्या को स्वीकार करता है (लेकिन केवल प्रत्येक में समान संख्या में तत्व देता है)। प्रत्येक सूची में तत्वों को अनपैक करने के लिए * फिर से उपयोग किया जाता है।

def sum_lists(*args):
    return list(map(sum, zip(*args)))

a = [1,2,3]
b = [1,2,3]  

sum_lists(a,b)

आउटपुट:

[2, 4, 6]

या 3 सूचियों के साथ

sum_lists([5,5,5,5,5], [10,10,10,10,10], [4,4,4,4,4])

आउटपुट:

[19, 19, 19, 19, 19]

1

आप उपयोग कर सकते हैं zip(), जो दो सरणियों को एक साथ "इंटरलेवेव" करेगा, और फिर map(), जो एक पुनरावृत्त में प्रत्येक तत्व के लिए एक फ़ंक्शन लागू करेगा:

>>> a = [1,2,3,4,5]
>>> b = [6,7,8,9,10]
>>> zip(a, b)
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
>>> map(lambda x: x[0] + x[1], zip(a, b))
[7, 9, 11, 13, 15]

1

यहाँ यह करने का एक और तरीका है। हम अजगर के आंतरिक __add__ फ़ंक्शन का उपयोग करते हैं:

class SumList(object):
    def __init__(self, this_list):
        self.mylist = this_list

    def __add__(self, other):
        new_list = []
        zipped_list = zip(self.mylist, other.mylist)
        for item in zipped_list:
            new_list.append(item[0] + item[1])
        return SumList(new_list)

    def __repr__(self):
        return str(self.mylist)

list1 = SumList([1,2,3,4,5])
list2 = SumList([10,20,30,40,50])
sum_list1_list2 = list1 + list2
print(sum_list1_list2)

उत्पादन

[11, 22, 33, 44, 55]

1

यदि आप सूचियों के बाकी मूल्यों को भी जोड़ना चाहते हैं तो आप इसका उपयोग कर सकते हैं (यह Python3.5 में काम कर रहा है)

def addVectors(v1, v2):
    sum = [x + y for x, y in zip(v1, v2)]
    if not len(v1) >= len(v2):
        sum += v2[len(v1):]
    else:
        sum += v1[len(v2):]

    return sum


#for testing 
if __name__=='__main__':
    a = [1, 2]
    b = [1, 2, 3, 4]
    print(a)
    print(b)
    print(addVectors(a,b))

1
    first = [1,2,3,4,5]
    second = [6,7,8,9,10]
    #one way
    third = [x + y for x, y in zip(first, second)]
    print("third" , third) 
    #otherway
    fourth = []
    for i,j in zip(first,second):
        global fourth
        fourth.append(i + j)
    print("fourth" , fourth )
#third [7, 9, 11, 13, 15]
#fourth [7, 9, 11, 13, 15]

1

यहाँ यह करने का एक और तरीका है। यह मेरे लिए ठीक काम कर रहा है।

N=int(input())
num1 = list(map(int, input().split()))
num2 = list(map(int, input().split()))
sum=[]

for i in range(0,N):
  sum.append(num1[i]+num2[i])

for element in sum:
  print(element, end=" ")

print("")

1
j = min(len(l1), len(l2))
l3 = [l1[i]+l2[i] for i in range(j)]

1
हालांकि यह कोड स्निपेट समाधान हो सकता है, जिसमें स्पष्टीकरण भी शामिल है , जो आपके पोस्ट की गुणवत्ता को बेहतर बनाने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है।
नरेंद्र जाधव

1

शायद सबसे सरल तरीका:

first = [1,2,3,4,5]
second = [6,7,8,9,10]
three=[]

for i in range(0,5):
    three.append(first[i]+second[i])

print(three)

1

यदि आप अपनी सूचियों को सुपीरियर सरणी मानते हैं, तो आपको उन्हें आसानी से योग करने की आवश्यकता है:

import numpy as np

third = np.array(first) + np.array(second)

print third

[7, 9, 11, 13, 15]

0

क्या होगा यदि आपके पास अलग-अलग लंबाई के साथ सूची है, तो आप कुछ इस तरह की कोशिश कर सकते हैं (उपयोग करके zip_longest)

from itertools import zip_longest  # izip_longest for python2.x

l1 = [1, 2, 3]
l2 = [4, 5, 6, 7]

>>> list(map(sum, zip_longest(l1, l2, fillvalue=0)))
[5, 7, 9, 7]

-2

आप इस विधि का उपयोग कर सकते हैं लेकिन यह तभी काम करेगा जब दोनों सूची समान आकार की हो:

first = [1, 2, 3, 4, 5]
second = [6, 7, 8, 9, 10]
third = []

a = len(first)
b = int(0)
while True:
    x = first[b]
    y = second[b]
    ans = x + y
    third.append(ans)
    b = b + 1
    if b == a:
        break

print third
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.