দুটি তালিকার মানগুলির 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, iterables zip করা ফল দৈর্ঘ্য 6. হতে হবে
টম

আমি মনে করি এটি অন্যান্য উত্তর কোজের চেয়ে বেশি দরকারী আপনি দরকারী স্টাফগুলি করতে পারেন যেমন গড় নিতে বা অ্যারের প্রতিটি উপাদানকে আলাদা ওজন দিতে এবং তাদের একত্রিত করতে
সিওখুনলি

আপনি যখন তালিকার সংখ্যাটি জানেন না তখন কি এটি করার কোনও উপায় আছে?
traggatmot

@ ট্র্যাগগ্যাটমোট: >>> lists_of_lists = [[1, 2, 3], [4, 5, 6]] >>> [sum(x) for x in zip(*lists_of_lists)] [5, 7, 9]
টম

49

ডক্স থেকে

import operator
list(map(operator.add, first,second))

2
আপনি বোঝাতে চেয়েছিলেন: তালিকা (মানচিত্র (অপারেটর.এডিডি, প্রথম, দ্বিতীয়))
Ghanem

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])

এখন পর্যন্ত সেরা উত্তর
ইয়ান

এটি কাজ করা উচিত, তবে আমার পরীক্ষায় এটি হয় না ... আমি জানি না কেন, তবে ন্যালি আমার কাছে একটি শক্তিশালী গ্রন্থাগার এবং জটিল একটি বলে মনে হয় ...
ডেকাডেঞ্জা

@ ডেকাডেনজা আপনি কীভাবে পরীক্ষাটি করেছেন?
আশফাক

হাই @ আশফাক, অনেক মাস কেটে গেছে এবং আমি নম্পি গ্রন্থাগারটি আরও ভাল করে শিখেছি। আমি এনপি.আররে সংজ্ঞায় ভুল ছিলাম। দুঃখিত।
ডেকাডেঞ্জা

ব্যবহার np.add (প্রথম, দ্বিতীয়) .tolist () একটি তালিকাতে ফলাফল পেতে
talekeDskobeDa

11

এটি তালিকার সংখ্যায় নিজেকে বিস্তৃত করে:

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

আপনার ক্ষেত্রে, myListOfListsহবে[first, second]


1
আপনি কি সম্পর্কে নিশ্চিত izip.from_iterable?
ডিএসএম

1
@ ডিএসএম: ধিক্কার! আমার মনে হয় আমি ভাবছিলাম 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]

বিকল্পভাবে, আপনি বিন্যাস যোগফল ব্যবহার করতে পারেন:

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

1
এটি দীর্ঘতর তালিকাগুলির তালিকাগুলিতে দুর্দান্তভাবে সাধারণীকরণ করে, যা আমার প্রয়োজন কেবল তাই!
ভেক্টরনট



2

আমার উত্তরটি Thiru এর সাথে পুনরাবৃত্তি হয়েছে যা এটি উত্তর দিয়েছিল 17 মার্চ 9:25 এ।

এটি সহজ এবং দ্রুত ছিল, এখানে তার সমাধানগুলি রয়েছে:

এটি করার সহজ উপায় এবং দ্রুত উপায় হ'ল:

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

বিকল্পভাবে, আপনি বিন্যাস যোগফল ব্যবহার করতে পারেন:

 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

যদি আপনার একই দৈর্ঘ্যের তালিকাগুলির অজানা সংখ্যা থাকে তবে আপনি নীচের ফাংশনটি ব্যবহার করতে পারেন।

এখানে * আরগগুলি তালিকাভুক্ত আর্গুমেন্টগুলির একটি পরিবর্তনশীল সংখ্যার গ্রহণ করে (তবে কেবল প্রতিটিটিতে একই সংখ্যার উপাদানগুলির যোগফল থাকে)। * প্রতিটি তালিকার প্রতিটি উপাদানকে আনপ্যাক করতে আবার * ব্যবহার করা হয়।

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

আপনি যদি তালিকার বাকী মানগুলিও যোগ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন (এটি পাইথন 3.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

এটি করার আরেকটি উপায় এখানে রয়েছে t এটি আমার পক্ষে ভাল কাজ করছে।

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.