কিভাবে Python দুটি তালিকা concatenate?




list (19)

আপনি list.extend ফাংশন জন্য যেতে পারেন।

l1 = [1,2,3]
l2 = [4,5,6]
l1.extend(l2)
print l1

আউটপুট:

[1,2,3,4,5,6]

কিভাবে আমি Python দুটি তালিকা সংহত করতে পারি?

উদাহরণ:

listone = [1, 2, 3]
listtwo = [4, 5, 6]

প্রত্যাশিত ফলাফল:

>>> joinedlist
[1, 2, 3, 4, 5, 6]

আপনি list বস্তুর সংজ্ঞায়িত append() পদ্ধতিটি ব্যবহার করতে পারেন:

mergedlist =[]
for elem in listone:
    mergedlist.append(elem)
for elem in listtwo:
    mergedlist.append(elem)

আপনি একটি list যোগ করার জন্য extend ব্যবহার করতে পারেন আরেকটি শেষ যোগ করতে পারেন:

listone = [1,2,3]
listtwo = [4,5,6]
mergedlist = []
mergedlist.extend(listone)
mergedlist.extend(listtwo)

আপনি কেবল + বা += অপারেটরটি নিম্নরূপ ব্যবহার করতে পারেন:

a = [1, 2, 3]
b = [4, 5, 6]

c = a + b

বা:

c = []
a = [1, 2, 3]
b = [4, 5, 6]

c += (a + b)

এছাড়াও, যদি আপনি মার্জড তালিকাগুলির মানগুলি অনন্য হতে চান তবে আপনি করতে পারেন:

c = list(set(a + b))

আপনি প্লাস অপারেটর ( + ) ব্যবহার করতে না পারেন, আপনি __add__ ফাংশন ব্যবহার করতে পারেন:

listone = [1,2,3]
listtwo = [4,5,6]

result = list.__add__(listone, listtwo)
print(result)

>>> [1, 2, 3, 4, 5, 6]

বিকল্পভাবে, যদি আপনি dunders ব্যবহার পছন্দ না করেন তবে আপনি operator আমদানি ব্যবহার করতে পারেন:

import operator

listone = [1,2,3]
listtwo = [4,5,6]

result = operator.add(listone, listtwo)
print(result)

>>> [1, 2, 3, 4, 5, 6]

এক এই একটু বেশি পঠনযোগ্য যুক্তি দিতে পারে।


আপনি ফাংশন extends ব্যবহার করতে পারেন

listone.extends(listtwo)

আমি অবাক হচ্ছি মনে হচ্ছে কেউ সহজ তালিকা বোঝার ব্যবহার করে প্রস্তাবিত নয়:

joined_list = [y for x in [list_one, list_two] for y in x]

এটি অতিরিক্ত অপপ্যাকিং জেনারেশাইজেশান ব্যবহার করার নতুনতম পদ্ধতির সমস্ত সুবিধা রয়েছে - অর্থাত আপনি বিভিন্নভাবে এটির বিভিন্ন ধরণের এটির (যেমন তালিকা, টুপল, রেঞ্জ, জেনারেটর) সংহত করতে পারেন - এবং এটি Python >= 3.5 পর্যন্ত সীমাবদ্ধ নয়।


আরো তালিকাগুলির জন্য আরো সাধারণ উপায় হিসাবে আপনি তাদের তালিকায় অন্তর্ভুক্ত করতে পারেন এবং itertools.chain.from_iterable() 1 ফাংশনটি ব্যবহার করুন যা THIS উত্তরটির উপর ভিত্তি করে একটি নেস্টেড তালিকা ফ্ল্যাশ করার জন্য সর্বোত্তম উপায়:

>>> l=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> import itertools
>>> list(itertools.chain.from_iterable(l))
[1, 2, 3, 4, 5, 6, 7, 8, 9] 

1. উল্লেখ্য যে chain.from_iterable() পাইথন => 2.6 তে উপলব্ধ। অন্যান্য সংস্করণে chain(*l)


এই প্রশ্ন সরাসরি দুটি তালিকা যোগদান সম্পর্কে জিজ্ঞেস করে। তবে অনুসন্ধানের ক্ষেত্রে এটি অনেক বেশি হলেও আপনি যখন অনেকগুলি তালিকা যোগদান করার উপায় খুঁজছেন (এমনকি শূন্য তালিকাগুলিতে যোগদান করার ক্ষেত্রে)।

আমি মনে করি সেরা বিকল্প তালিকা বোঝার ব্যবহার করা হয়:

>>> a = [[1,2,3], [4,5,6], [7,8,9]]
>>> [x for xs in a for x in xs]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

আপনি জেনারেটরও তৈরি করতে পারেন:

>>> map(str, (x for xs in a for x in xs))
['1', '2', '3', '4', '5', '6', '7', '8', '9']

ওল্ড উত্তর

এই আরো জেনেরিক পদ্ধতির বিবেচনা করুন:

a = [[1,2,3], [4,5,6], [7,8,9]]
reduce(lambda c, x: c + x, a, [])

আউটপুট হবে:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

দ্রষ্টব্য, এটি [] বা [[1,2,3]] যখন সঠিকভাবে কাজ করে।

যাইহোক, এটি itertools সাথে আরও দক্ষতার সাথে সম্পন্ন করা যেতে পারে:

a = [[1,2,3], [4,5,6], [7,8,9]]
list(itertools.chain(*a))

যদি আপনার list প্রয়োজন হয় না তবে কেবল একটি যথোপযুক্ত সৃষ্টিকর্তা, বাদ দিন list()

হালনাগাদ

বিকল্পগুলিতে প্যাট্রিক কলিন্সের পরামর্শগুলি আপনার জন্যও কাজ করতে পারে:

sum(a, [])

এটি একটি জেনারেটরও তৈরি করা সম্ভব যা কেবলমাত্র উভয় তালিকাতে আইটেমগুলির উপর পুনরাবৃত্তি করে। এটি আপনাকে একটি নতুন তালিকাতে আইটেমগুলি অনুলিপি না করে প্রক্রিয়া করার জন্য চেইন তালিকা (বা কোনও পুনরাবৃত্তিযোগ্য) একসাথে করতে দেয়:

import itertools
for item in itertools.chain(listone, listtwo):
   # do something with each list item

জটিল সাজানোর নিয়মগুলির সাথে দুটি আদেশের তালিকা একত্রিত করার প্রয়োজন হলে আপনাকে নিম্নলিখিত কোডে এটি রোল করতে হবে (পঠনযোগ্যতার জন্য একটি সাধারণ সাজানোর নিয়ম ব্যবহার করে :-))।

list1 = [1,2,5]
list2 = [2,3,4]
newlist = []

while list1 and list2:
    if list1[0] == list2[0]:
        newlist.append(list1.pop(0))
        list2.pop(0)
    elif list1[0] < list2[0]:
        newlist.append(list1.pop(0))
    else:
        newlist.append(list2.pop(0))

if list1:
    newlist.extend(list1)
if list2:
    newlist.extend(list2)

assert(newlist == [1, 2, 3, 4, 5])

তালিকা একটি তালিকা একত্রিত করার জন্য সত্যিই সংক্ষিপ্ত উপায়

list_of_lists = [[1,2,3], [4,5,6], [7,8,9]]
reduce(list.__add__, list_of_lists)

যা আমাদের দেয়

[1, 2, 3, 4, 5, 6, 7, 8, 9]

পাইথন দুটি তালিকা যোগদান:

>>> a = [1, 2, 3, 4]
>>> b = [1, 4, 6, 7]
>>> c = a + b
>>> c
[1, 2, 3, 4, 1, 4, 6, 7]

আপনি যদি কোন সদৃশ না চান:

>>> a = [1, 2, 3, 4, 5, 6]
>>> b = [5, 6, 7, 8]
>>> c = list(set(a + b))
>>> c
[1, 2, 3, 4, 5, 6, 7, 8]

পাইথনটিতে আপনি এই কমান্ডের সাথে সামঞ্জস্যপূর্ণ মাত্রার দুটি অ্যারে সংহত করতে পারেন

numpy.concatenate([a,b])

সুতরাং দুটি সহজ উপায় আছে।

  1. ব্যবহার করে :: এটি সরবরাহকৃত তালিকা থেকে একটি নতুন তালিকা তৈরি করে

উদাহরণ:

In [1]: a = [1, 2, 3]

In [2]: b = [4, 5, 6]

In [3]: a + b
Out[3]: [1, 2, 3, 4, 5, 6]

In [4]: %timeit a + b
10000000 loops, best of 3: 126 ns per loop
  1. প্রসারিত ব্যবহার করে : এটি বিদ্যমান তালিকাতে নতুন তালিকা যুক্ত করে। তার মানে এটি একটি পৃথক তালিকা তৈরি করে না।

উদাহরণ:

In [1]: a = [1, 2, 3]

In [2]: b = [4, 5, 6]

In [3]: %timeit a.extend(b)
10000000 loops, best of 3: 91.1 ns per loop

সুতরাং আমরা দেখতে পাই যে সর্বাধিক জনপ্রিয় পদ্ধতিগুলির মধ্যে extend কার্যকর।


itertools.chain ফাংশনটি যুক্তিযুক্ত সংখ্যক আর্গুমেন্ট গ্রহণ করে তা itertools.chain

>>> l1 = ['a']; l2 = ['b', 'c']; l3 = ['d', 'e', 'f']
>>> [i for i in itertools.chain(l1, l2)]
['a', 'b', 'c']
>>> [i for i in itertools.chain(l1, l2, l3)]
['a', 'b', 'c', 'd', 'e', 'f']

যদি একটি পুনরাবৃত্তিযোগ্য (tuple, তালিকা, জেনারেটর, ইত্যাদি) ইনপুট হয়, from_iterable ক্লাস পদ্ধতি ব্যবহার করা যেতে পারে:

>>> il = [['a'], ['b', 'c'], ['d', 'e', 'f']]
>>> [i for i in itertools.chain.from_iterable(il)]
['a', 'b', 'c', 'd', 'e', 'f']

import itertools

A = list(zip([1,3,5,7,9],[2,4,6,8,10]))
B = [1,3,5,7,9]+[2,4,6,8,10]
C = list(set([1,3,5,7,9] + [2,4,6,8,10]))

D = [1,3,5,7,9]
D.append([2,4,6,8,10])

E = [1,3,5,7,9]
E.extend([2,4,6,8,10])

F = []
for a in itertools.chain([1,3,5,7,9], [2,4,6,8,10]):
    F.append(a)


print ("A: " + str(A))
print ("B: " + str(B))
print ("C: " + str(C))
print ("D: " + str(D))
print ("E: " + str(E))
print ("F: " + str(F))

আউটপুট:

A: [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
B: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
C: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
D: [1, 3, 5, 7, 9, [2, 4, 6, 8, 10]]
E: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
F: [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]

a = [1,2,3,4,5,6]
b = [7,8,9,10]
c = a.extend(b)

মুদ্রণ (গ) দেয়

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

lst1 = [1,2]

lst2 = [3,4]

def list_combinationer(Bushisms, are_funny):

    for item in lst1:
        lst2.append(item)
        lst1n2 = sorted(lst2)
        print lst1n2

list_combinationer(lst1, lst2)

[1,2,3,4]




list