পাইথনের তালিকা পদ্ধতি সংযোজন এবং প্রসারিতের মধ্যে পার্থক্য কী?


3116

তালিকা পদ্ধতি append()এবং এর মধ্যে পার্থক্য কী extend()?

উত্তর:


5248

append: শেষে বস্তু সংযোজন।

x = [1, 2, 3]
x.append([4, 5])
print (x)

আপনি দেয়: [1, 2, 3, [4, 5]]


extend: পুনরাবৃত্তিযোগ্য থেকে উপাদান যুক্ত করে তালিকা প্রসারিত করে Ex

x = [1, 2, 3]
x.extend([4, 5])
print (x)

আপনি দেয়: [1, 2, 3, 4, 5]


122
extendউপরের উদাহরণে, কেবল অতিরিক্ত অপারেটরটি ব্যবহার করে এবং এর মধ্যে পার্থক্য কী x = x + [4, 5]?
রোহান

303
আসলে একটি বড় পার্থক্য রয়েছে - x + [4, 5]আপনাকে x.extend()এক্সকে নির্ধারিত একটি নতুন তালিকা দেয় - মূল তালিকাটিকে রূপান্তর করে। আমি নীচে এখানে আমার উত্তর বিস্তারিত।
অ্যারন হল

@ অ্যারনহল @ রোহান কিন্তু এটি একই রকম x += [4,5]
অস্তিৎতা শ্রীবাস্তব

1
@ অস্তিত্বস্রীবাস্তব আসলে, আমার মনে হয়
বাইটোকোডের

1
শব্দ ব্যবহার করে যখন appendহয় বস্তু । যদি আপনি ব্যবহার করার চেষ্টা করেন extendএবং আপনি একটি অভিধানে পাস করেন তবে এটি কীটি সংযোজন করবে এবং অ্যারেটির শেষে পুরো হ্যাশটি নয়।
অ্যান্টনি

640

appendএকটি তালিকায় একটি উপাদান যুক্ত করে, এবং extendঅন্য তালিকার সাথে প্রথম তালিকাকে সম্মতি জানায় (বা অন্য কোনও পুনরাবৃত্তীয়, প্রয়োজনীয়তার জন্য কোনও তালিকা নয়))

>>> li = ['a', 'b', 'mpilgrim', 'z', 'example']
>>> li
['a', 'b', 'mpilgrim', 'z', 'example']

>>> li.append("new")
>>> li
['a', 'b', 'mpilgrim', 'z', 'example', 'new']

>>> li.append(["new", 2])
>>> li
['a', 'b', 'mpilgrim', 'z', 'example', 'new', ['new', 2]]

>>> li.insert(2, "new")
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', ['new', 2]]

>>> li.extend(["two", "elements"])
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', ['new', 2], 'two', 'elements']

489

তালিকা পদ্ধতি সংযোজন এবং প্রসারিতের মধ্যে পার্থক্য কী?

  • appendতালিকার শেষে একটি যুক্ত উপাদান হিসাবে যুক্তি যুক্ত করে। তালিকার দৈর্ঘ্য নিজেই এক এক করে বাড়বে।
  • extendতার যুক্তির উপরে পুনরাবৃত্তি তালিকায় প্রতিটি উপাদান যুক্ত করে তালিকাটি প্রসারিত করে। তালিকার দৈর্ঘ্য বৃদ্ধি পাবে তবে অনেক উপাদান পুনরাবৃত্ত যুক্তিতে ছিল।

append

list.appendপদ্ধতি তালিকার শেষে একটি বস্তু appends।

my_list.append(object) 

বস্তু যাই হোক না কেন, একটি সংখ্যা, একটি স্ট্রিং, অন্য তালিকা, বা অন্য কিছু, এটি my_listতালিকার একক প্রবেশ হিসাবে শেষের দিকে যুক্ত হয়ে যায় ।

>>> my_list
['foo', 'bar']
>>> my_list.append('baz')
>>> my_list
['foo', 'bar', 'baz']

সুতরাং মনে রাখবেন যে একটি তালিকা একটি বস্তু। আপনি যদি অন্য তালিকাকে তালিকার সাথে যুক্ত করেন তবে প্রথম তালিকাটি তালিকার শেষে একক অবজেক্ট হবে (যা আপনি যা চান তা নাও হতে পারে):

>>> another_list = [1, 2, 3]
>>> my_list.append(another_list)
>>> my_list
['foo', 'bar', 'baz', [1, 2, 3]]
                     #^^^^^^^^^--- single item at the end of the list.

extend

list.extendপদ্ধতি একটি iterable থেকে উপাদানগুলি সংযোজন করে একটি তালিকা প্রসারিত:

my_list.extend(iterable)

সুতরাং প্রসারিতের সাথে, পুনরাবৃত্তির প্রতিটি উপাদান তালিকায় যুক্ত হয়ে যায়। উদাহরণ স্বরূপ:

>>> my_list
['foo', 'bar']
>>> another_list = [1, 2, 3]
>>> my_list.extend(another_list)
>>> my_list
['foo', 'bar', 1, 2, 3]

মনে রাখবেন যে স্ট্রিংটি পুনরাবৃত্তিযোগ্য, সুতরাং আপনি যদি একটি স্ট্রিং সহ একটি তালিকা প্রসারিত করেন তবে আপনি স্ট্রিংটির উপরে পুনরাবৃত্তি করার সাথে সাথে প্রতিটি অক্ষর যুক্ত করবেন (যা আপনি যা চান তা নাও হতে পারে):

>>> my_list.extend('baz')
>>> my_list
['foo', 'bar', 1, 2, 3, 'b', 'a', 'z']

অপারেটর ওভারলোড, __add__( +) এবং __iadd__( +=)

উভয় +এবং +=অপারেটর জন্য সংজ্ঞায়িত করা হয় list। তারা প্রসারিত শব্দার্থগতভাবে অনুরূপ।

my_list + another_list মেমোরিতে একটি তৃতীয় তালিকা তৈরি করে, যাতে আপনি এর ফলাফলটি ফিরিয়ে দিতে পারেন, তবে এটির জন্য দ্বিতীয় পুনরাবৃত্তিযোগ্য একটি তালিকা হওয়া দরকার।

my_list += another_listমডিফাই তালিকায় জায়গা (এটা হল ইন-জায়গা অপারেটর, এবং তালিকা চপল বস্তু, হিসাবে আমরা দেখা করেছি হয়) তাই এটি একটি নতুন তালিকা তৈরি করে না। এটি প্রসারিতের মতো কাজ করে, যাতে দ্বিতীয় পুনরাবৃত্তিযোগ্য কোনও ধরণের পুনরাবৃত্ত হতে পারে।

বিভ্রান্ত করবেন না - এর my_list = my_list + another_listসমতুল্য নয় +=- এটি আপনাকে আমার_লিস্টে বরাদ্দ করা একদম নতুন তালিকা দেয়।

সময় জটিলতা

অতিরিক্ত সংক্ষিপ্ত সময়ের জটিলতা রয়েছে ও (1) App

প্রসারের সময় জটিলতা রয়েছে, হে (কে)।

appendজটিলতায় যোগ করার জন্য একাধিক কলগুলির মাধ্যমে আইট্রেট করা , এটিকে প্রসারিতের সমতুল্য করে তোলে এবং যেহেতু এক্সটেন্ড এর পুনরাবৃত্তিটি সিতে প্রয়োগ করা হয়, আপনি যদি কোনও তালিকার উপর থেকে পুনরাবৃত্তিযোগ্য থেকে ধারাবাহিক আইটেম সংযোজন করতে চান তবে এটি সর্বদা দ্রুত হবে।

কর্মক্ষমতা

আপনি আরও বেশি পারফরম্যান্স কী তা ভাবতে পারেন, যেহেতু পরিধি হিসাবে একই ফলাফল অর্জন করতে ব্যবহার করা যেতে পারে। নিম্নলিখিত ফাংশনগুলি একই কাজ করে:

def append(alist, iterable):
    for item in iterable:
        alist.append(item)

def extend(alist, iterable):
    alist.extend(iterable)

সুতরাং আসুন তাদের সময়:

import timeit

>>> min(timeit.repeat(lambda: append([], "abcdefghijklmnopqrstuvwxyz")))
2.867846965789795
>>> min(timeit.repeat(lambda: extend([], "abcdefghijklmnopqrstuvwxyz")))
0.8060121536254883

সময় সম্পর্কে একটি মন্তব্য সম্বোধন

একজন মন্তব্যকারী বলেছেন:

নিখুঁত উত্তর, আমি কেবল মাত্র একটি উপাদান যুক্ত করার তুলনা করার সময়টি মিস করছি

শব্দার্থগতভাবে সঠিক জিনিসটি করুন। যদি আপনি একটি পুনরাবৃত্তযোগ্য সমস্ত উপাদান যুক্ত করতে চান তবে ব্যবহার করুন extend। আপনি যদি কেবল একটি উপাদান যুক্ত করে থাকেন তবে ব্যবহার করুন append

ঠিক আছে, সুতরাং সময় মতো এটি কীভাবে কার্যকর হয় তা দেখার জন্য একটি পরীক্ষা তৈরি করি:

def append_one(a_list, element):
    a_list.append(element)

def extend_one(a_list, element):
    """creating a new list is semantically the most direct
    way to create an iterable to give to extend"""
    a_list.extend([element])

import timeit

এবং আমরা দেখতে পাই যে কেবল প্রসারিত ব্যবহারের জন্য পুনরাবৃত্তিযোগ্য তৈরি করার জন্য আমাদের পথের বাইরে যাওয়া হ'ল সময় (অপ্রয়োজনীয়) অপচয়

>>> min(timeit.repeat(lambda: append_one([], 0)))
0.2082819009956438
>>> min(timeit.repeat(lambda: extend_one([], 0)))
0.2397019260097295

আমরা এ থেকে শিখি যে extendযখন আমাদের যুক্ত করার জন্য কেবলমাত্র একটি উপাদান রয়েছে তখন ব্যবহার করে কিছুই পাওয়া যায় না ।

এছাড়াও, এই সময়গুলি গুরুত্বপূর্ণ নয়। আমি কেবল তাদের এ কথাটি দেখানোর জন্য দিচ্ছি যে পাইথনে, শব্দার্থগতভাবে সঠিক কাজটি করা জিনিসগুলি সঠিক উপায়ে করছে ™

এটি অনুমেয় যে আপনি দুটি তুলনামূলক অপারেশনগুলির সময় পরীক্ষা করতে পারেন এবং একটি অস্পষ্ট বা বিপরীত ফলাফল পেতে পারেন। শব্দার্থগতভাবে সঠিক জিনিসটি করার জন্য কেবল মনোনিবেশ করুন।

উপসংহার

আমরা দেখি যে extendশব্দার্থগতভাবে পরিষ্কার, এবং যে এটা অনেক দ্রুত চেয়ে চালাতে পারেন append, যখন আপনি একটি তালিকা একটি iterable প্রতিটি উপাদান যোগ মনস্থ।

তালিকায় যুক্ত করতে যদি আপনার কাছে কেবলমাত্র একটি একক উপাদান (পুনরাবৃত্তযোগ্য নয়) থাকে তবে ব্যবহার করুন append


1
অ্যারোন হল @ অ্যালগরিদমে সময় সম্পর্কে একটি ছোট মন্তব্য। "এক্সটেন্ড_োন" "কিছুটা ভুল" সময় ফিরে আসতে পারে কারণ একটি তালিকা তৈরির সাথেও জড়িত। আপনি আরও কঠোর হতে চাইলে সম্ভবত আইটেমগুলি ভেরিয়েবল ( ex1 = 0এবং ex2 = [0]) হিসাবে তৈরি করা এবং এই ভেরিয়েবলগুলি পাস করা সম্ভবত আরও ভাল ।
ইলিয়াস ইলিয়াডিস

19
নিখুঁত উত্তর। l1 += l2বনাম এর অভিনয় সম্পর্কে কি l1.extend(l2)?
জিন-ফ্রাঙ্কোইস টি।

6
@ জিন-ফ্রানকোয়েস্ট .: l1 += l2এবং l1.extend(l2)শেষ পর্যন্ত একই কোডটি কার্যকর করুন (এতে list_extendফাংশনটি listobject.c)। কেবলমাত্র পার্থক্যগুলি +=হ'ল : ১. পুনরায় নিয়োগ l1(নিজের পক্ষে listএটি, তবে পুনরায় নিযুক্তি অপরিবর্তনীয় প্রকারকে সমর্থন করে যা পরে একই বস্তু নয়) এটি অবৈধ করে তোলে যদি l1বাস্তবে কোনও পরিবর্তনযোগ্য বস্তুর বৈশিষ্ট্য হয়; উদাহরণস্বরূপ, t = ([],), t[0] += lstব্যর্থ হবে, যখন t[0].extend(lst)কাজ করবে। 2. l1 += l2উত্সর্গীকৃত বাইটকোডগুলি ব্যবহার করে, যখন l1.extend(l2)সাধারণীকরণ পদ্ধতি প্রেরণ ব্যবহার করে; এই +=তুলনায় দ্রুত করে তোলে extend
শ্যাডোর্যাঞ্জার

3
যে বিষয়টি আবার পাঠাতে +=হবে l1তার অর্থ extendহ'ল কিছু ক্ষেত্রে, ধীর প্রেরণটি আংশিক বা সম্পূর্ণরূপে বাম পাশের দিকে না বরাদ্দ করে তৈরি করা হয়। উদাহরণস্বরূপ, যদি listএকটি বস্তুর একটি বৈশিষ্ট্য হল, self.l1 += l2এবং self.l1.extend(l2)আমার পাইথন 3.6 ইন্সটল উপর অভিন্ন কর্মক্ষমতা আছে, কারণ বাস্তব অপারেশন আরো ভালো হয় self.l1 = self.l1.__iadd__(l2), যার মানে এটি একটি পরিমিতরূপে ব্যয়বহুল পালন করা আবশ্যক STORE_ATTRযে self.l1.extend(l2)হবে তা নয়।
শ্যাডোএ্যাঞ্জার

2
স্থানীয় পরীক্ষাগুলিতে সাধারণ তুলনা: একটি স্থানীয় ভেরিয়েবলের জন্য (সুতরাং এটি +=কেবলমাত্র ব্যবহার করা হচ্ছে STORE_FAST, যা অত্যন্ত সস্তা), যেখানে মূল্য যুক্ত হচ্ছে listএটিতে একটি আইটেমের সাথে বিদ্যমান রয়েছে, অপারেশনটি 1000 বার পুনরাবৃত্তি হয়েছে, +=গড়ে প্রায় 33 এনএস নিয়েছে , যখন extend78 এনএস নিয়েছে, 45 এনএসের পার্থক্য। যদি l1একটি গ্লোবাল হয় (আরও ব্যয়বহুল প্রয়োজন STORE_GLOBAL), পার্থক্যটি 17 এনএসে হ্রাস পাবে। তাহলে l1আসলে local.l1(এমনকি আরো ব্যয়বহুল প্রয়োজন STORE_ATTR), সেখানে মধ্যে কোনো অর্থপূর্ণ পার্থক্য নেই +=এবং extend(সময় প্রায় অভিন্ন; extendকখনও কখনও জেতে)।
শ্যাডোর্যাঞ্জার

121

appendএকটি একক উপাদান সংযোজন। extendউপাদানগুলির একটি তালিকা সংযোজন করে।

মনে রাখবেন আপনি যদি যোগ করার জন্য একটি তালিকা পাস করেন তবে এটি এখনও একটি উপাদান যুক্ত করে:

>>> a = [1, 2, 3]
>>> a.append([4, 5, 6])
>>> a
[1, 2, 3, [4, 5, 6]]

62

অতিরিক্ত বনাম যোগ করুন App

এখানে চিত্র বর্ণনা লিখুন

অ্যাপেন্ডের সাহায্যে আপনি একটি একক উপাদান যুক্ত করতে পারেন যা তালিকাটি প্রসারিত করবে:

>>> a = [1,2]
>>> a.append(3)
>>> a
[1,2,3]

আপনি যদি একাধিক উপাদানকে প্রসারিত করতে চান তবে আপনার প্রসারিত ব্যবহার করা উচিত, কারণ আপনি কেবলমাত্র একটি এলেন্ট বা উপাদানটির একটি তালিকা যুক্ত করতে পারেন:

>>> a.append([4,5])
>>> a
>>> [1,2,3,[4,5]]

যাতে আপনি নেস্টেড তালিকা পান

প্রসারিত পরিবর্তে, আপনি এর মতো একটি একক উপাদান প্রসারিত করতে পারেন

>>> a = [1,2]
>>> a.extend([3])
>>> a
[1,2,3]

অথবা, আলাদাভাবে, সংযোজন থেকে, তালিকায় বাসা বাঁধা না দিয়ে একসাথে আরও উপাদান বাড়িয়ে দিন মূল নামটিতে (এটিই নামটির প্রসারিত কারণ)

>>> a.extend([4,5,6])
>>> a
[1,2,3,4,5,6]

উভয় পদ্ধতির সাথে একটি উপাদান যুক্ত করা

এখানে চিত্র বর্ণনা লিখুন

সংযোজন এবং প্রসারিত উভয়ই তালিকার শেষে একটি উপাদান যুক্ত করতে পারে, যদিও পরিশিষ্টগুলি সহজ।

1 উপাদান যুক্ত করুন

>>> x = [1,2]
>>> x.append(3)
>>> x
[1,2,3]

একটি উপাদান প্রসারিত করুন

>>> x = [1,2]
>>> x.extend([3])
>>> x
[1,2,3]

আরও ফলাফল যুক্ত করা হচ্ছে ... বিভিন্ন ফলাফল সহ

আপনি যদি একাধিক উপাদানের জন্য অ্যাপেন্ড ব্যবহার করেন তবে আপনাকে যুক্তি হিসাবে উপাদানগুলির একটি তালিকা পাস করতে হবে এবং আপনি একটি নিস্টেড তালিকা পাবেন!

>>> x = [1,2]
>>> x.append([3,4])
>>> x
[1,2,[3,4]]

পরিবর্তে প্রসারিতের পরিবর্তে, আপনি একটি যুক্তি হিসাবে একটি তালিকা পাস করে, তবে আপনি পুরনো ক্ষেত্রে বাসা বাঁধা না এমন নতুন উপাদান সহ একটি তালিকা পাবেন।

>>> z = [1,2] 
>>> z.extend([3,4])
>>> z
[1,2,3,4]

সুতরাং, আরও উপাদান সহ, আপনি আরও আইটেম সহ একটি তালিকা পেতে প্রসারিত ব্যবহার করবেন। তবে, তালিকা যুক্ত করা তালিকায় আরও উপাদান যুক্ত করবে না, তবে একটি উপাদান যা নেস্টেড তালিকা যা আপনি কোডের আউটপুটে পরিষ্কার দেখতে পাচ্ছেন।

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


61

নিম্নলিখিত দুটি স্নিপেটগুলি শব্দার্থগতভাবে সমতুল্য:

for item in iterator:
    a_list.append(item)

এবং

a_list.extend(iterator)

লুপটি সিতে প্রয়োগ করা হওয়ায় পরবর্তীগুলি আরও দ্রুত হতে পারে


20
লুপে প্রবেশের চেয়ে আমার মেশিনে প্রসারিত করা 4x ডলার দ্রুত (100 জুপের 100 লুপের জন্য 16us বনাম 4us)
অ্যালেক্স এল

6
extend()সম্ভবত preallocates, append()সম্ভবত না।
ম্যাড পদার্থবিদ 13

@MadPhysicist: সম্পন্নতা 'হেতু জন্য, এমন সময় যেখানে হবে extend() না পারেন, বুদ্ধিমানের মতো preallocate যেহেতু কিছু iterables বাস্তবায়ন না __len__(), কিন্তু আপনি আমি যদি এটা চেষ্টা করে না বিস্মিত হতে চাই। পারফরম্যান্স লাভের কিছুটা পাইথনের পরিবর্তে খাঁটি সিতে পুনরাবৃত্ত অংশটি করা থেকে আসে, যেমন হারুনের উত্তরে উল্লেখ করা হয়েছিল ।
সোরেন জর্নস্ট্যাড

44

append()পদ্ধতি তালিকার শেষে একটি আইটেম যোগ করা হয়েছে।

x = [1, 2, 3]
x.append([4, 5])
x.append('abc')
print(x)
# gives you
[1, 2, 3, [4, 5], 'abc']

extend()পদ্ধতি একটি আর্গুমেন্ট, একটি তালিকা লাগে, এবং মূল লিস্টে যুক্তি আইটেম প্রতিটি appends। (তালিকাগুলি ক্লাস হিসাবে প্রয়োগ করা হয় “" তালিকা তৈরি করা "সত্যই একটি বর্গকে তাত্পর্যপূর্ণ করে তোলে such যেমনটি, তালিকায় এটিতে কাজ করে এমন পদ্ধতি রয়েছে))

x = [1, 2, 3]
x.extend([4, 5])
x.extend('abc')
print(x)
# gives you
[1, 2, 3, 4, 5, 'a', 'b', 'c']

থেকে ডাইভ মধ্যে পাইথন


এটি কেবল পুনরাবৃত্তিযোগ্য না হওয়ার কারণে আপনি কেবল 6 দিয়ে প্রসারিত করতে পারবেন না। এবং আপনার উদাহরণের দ্বিতীয় আউটপুটটি ভুল। আপনি extendএকটি উপাদান সহ একটি তালিকা হিসাবে এটি প্রবেশ করানোর পরে 'এবিসি' একক উপাদান হিসাবে যুক্ত হবে ['abc']: [১, ২, ৩, ৪, ৫, 'এবিসি']। আপনার উদাহরণ আউটপুট সঠিক করতে, এর অ আ ক খ লাইন পরিবর্তন করুন: x.extend('abc')। এবং এটি সরান x.extend(6)বা এটিকে পরিবর্তন করুন x.extend([6])
অ্যানেরয়েড

37

আপনি জায়গায় বাড়ানোর পরিবর্তে প্রসারিত ফেরতের জন্য "+" ব্যবহার করতে পারেন।

l1=range(10)

l1+[11]

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

l2=range(10,1,-1)

l1+l2

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

একইভাবে +=স্থানের আচরণের জন্য, তবে append& এর থেকে সামান্য পার্থক্য রয়েছে extend। সবচেয়ে বড় পার্থক্য এক +=থেকে appendএবং extendযখন এটা ফাংশন সুযোগ ব্যবহার করা হয় দেখতে এই ব্লগ পোস্টে


'+' প্রসারিত করতে ব্যবহার করা কি সময়ের জটিলতায় কোনও প্রভাব ফেলবে?
খোলামেলা

5
: @franklin, বিস্তারিত জানার জন্য এই উত্তরটি দেখুন stackoverflow.com/a/28119966/2230844
denfromufa

1
আমি দেখতে পাচ্ছি না কীভাবে এটি প্রশ্নের উত্তর দেয়
পিপ্পারি

22

append(object) - তালিকায় একটি অবজেক্ট যুক্ত করে তালিকা আপডেট করে।

x = [20]
# List passed to the append(object) method is treated as a single object.
x.append([21, 22, 23])
# Hence the resultant list length will be 2
print(x)
--> [20, [21, 22, 23]]

extend(list) - মূলত দুটি তালিকাকে সম্মতি জানায়।

x = [20]
# The parameter passed to extend(list) method is treated as a list.
# Eventually it is two lists being concatenated.
x.extend([21, 22, 23])
# Here the resultant list's length is 4
print(x)
[20, 21, 22, 23]

20

extend()একটি পুনরাবৃত্তি যুক্তি দিয়ে ব্যবহার করা যেতে পারে। এখানে একটি উদাহরণ। আপনি তালিকাটির তালিকার বাইরে এই ভাবে একটি তালিকা তৈরি করতে চান:

থেকে

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

তুমি চাও

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

আপনি এটি করতে ব্যবহার itertools.chain.from_iterable()করতে পারেন। এই পদ্ধতির ফলাফল আউটরেটার rator এর বাস্তবায়ন সমান

def from_iterable(iterables):
    # chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
    for it in iterables:
        for element in it:
            yield element

আমাদের উদাহরণে ফিরে আসুন আমরা করতে পারি

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

এবং চেয়েছিলেন তালিকা পেতে।

এখানে extend()পুনরাবৃত্তি যুক্তি দিয়ে সমানভাবে কীভাবে ব্যবহার করা যায় তা এখানে :

merged = []
merged.extend(itertools.chain.from_iterable(list2d))
print(merged)
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]

2
এই উত্তরটি
পরিশিষ্টের

19

এটি অপারেটরের সমতুল্য appendএবং extendব্যবহার +:

>>> x = [1,2,3]
>>> x
[1, 2, 3]
>>> x = x + [4,5,6] # Extend
>>> x
[1, 2, 3, 4, 5, 6]
>>> x = x + [[7,8]] # Append
>>> x
[1, 2, 3, 4, 5, 6, [7, 8]]

কেন = +?! আরও সংক্ষিপ্ত
denfromufa

16

অ্যাপেন্ড () : এটি মূলত একটি উপাদান যুক্ত করতে পাইথনে ব্যবহৃত হয়।

উদাহরণ 1:

>> a = [1, 2, 3, 4]
>> a.append(5)
>> print(a)
>> a = [1, 2, 3, 4, 5]

উদাহরণ 2:

>> a = [1, 2, 3, 4]
>> a.append([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, [5, 6]]

প্রসারিত () : যেখানে প্রসারিত (), দুটি তালিকায় একত্রিত হতে বা এক তালিকায় একাধিক উপাদান সন্নিবেশ করানোর জন্য ব্যবহৃত হয়।

উদাহরণ 1:

>> a = [1, 2, 3, 4]
>> b = [5, 6, 7, 8]
>> a.extend(b)
>> print(a)
>> a = [1, 2, 3, 4, 5, 6, 7, 8]

উদাহরণ 2:

>> a = [1, 2, 3, 4]
>> a.extend([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, 5, 6]

12

একটি আকর্ষণীয় বিন্দু যা ইঙ্গিত করা হয়েছে, তবে ব্যাখ্যা করা হয়নি, তা হ'ল প্রসারণটি অতিরিক্ত সংযোজনের চেয়ে দ্রুত। যে কোনও লুপের অভ্যন্তরে সংযোজন রয়েছে তার জন্য list.extend (প্রক্রিয়াজাত_ উপাদানসমূহ) দ্বারা প্রতিস্থাপন হিসাবে বিবেচনা করা উচিত।

মনে রাখবেন যে নতুন উপাদানগুলিকে যুক্ত করার ফলে মেমরির আরও ভাল অবস্থানে পুরো তালিকার রিয়েলব্যাকশন হতে পারে। এটি যদি বেশ কয়েকবার করা হয় কারণ আমরা একবারে 1 টি উপাদান যুক্ত করছি, সামগ্রিক কর্মক্ষমতা ক্ষতিগ্রস্থ হয়। এই অর্থে, list.extend "" .join (স্ট্রিংলিস্ট) এর সাথে অনুরূপ।


12

সংযোজন একবারে পুরো ডেটা যুক্ত করে। নতুন তৈরি সূচীতে পুরো ডেটা যুক্ত হবে। অন্য দিকে,extend , নাম হিসাবে এটি প্রস্তাবিত হিসাবে বর্তমান অ্যারে প্রসারিত করে।

উদাহরণ স্বরূপ

list1 = [123, 456, 678]
list2 = [111, 222]

আমাদের সাথে append:

result = [123, 456, 678, [111, 222]]

চলার সময় extendআমরা পাই:

result = [123, 456, 678, 111, 222]

8

একটি ইংরেজি অভিধান শব্দগুলির সংজ্ঞা দেয় appendএবং extendহিসাবে:

append : একটি লিখিত নথির শেষে (কিছু) যুক্ত করুন।
প্রসারিত : বৃহত্তর করা। বড় বা প্রসারিত করুন


সেই জ্ঞান দিয়ে এখন বুঝতে পারি

1) এবং মধ্যে পার্থক্যappendextend

append:

  • যে কোনও পাইথন অবজেক্টকে যেমন রয়েছে তেমন সংযোজন করে তালিকার শেষে (অর্থাত হিসেবে তালিকায় শেষ উপাদান) এর।
  • ফলাফলের তালিকাটি নেস্টেড হতে পারে এবং ভিন্ন ভিন্ন উপাদান থাকতে পারে (যেমন তালিকা, স্ট্রিং, টিপল, অভিধান, সেট ইত্যাদি)

extend:

  • যেকোন পুনরাবৃত্তিকে তার যুক্তি হিসাবে গ্রহণ করে এবং তালিকাটি আরও বড় করে তোলে ।
  • ফলাফলের তালিকাটি সর্বদা এক-মাত্রিক তালিকা (যেমন কোনও বাসা বাঁধে না) এবং প্রয়োগের ফলস্বরূপ এতে এতে ভিন্নজাতীয় উপাদান থাকতে পারে (যেমন অক্ষর, পূর্ণসংখ্যা, ভাসা) list(iterable)

2) এবং মধ্যে মিলappendextend

  • উভয়ই ঠিক একটি যুক্তি গ্রহণ করে।
  • উভয়ই জায়গায় স্থানটি পরিবর্তন করে
  • ফলস্বরূপ, উভয়ই ফিরে আসে None

উদাহরণ

lis = [1, 2, 3]

# 'extend' is equivalent to this
lis = lis + list(iterable)

# 'append' simply appends its argument as the last element to the list
# as long as the argument is a valid Python object
list.append(object)

5

আমি আশা করি আমি এই প্রশ্নের একটি দরকারী পরিপূরক করতে পারেন। যদি আপনার তালিকাতে একটি নির্দিষ্ট ধরণের অবজেক্ট সংরক্ষণ করা হয়, উদাহরণস্বরূপ Info, এখানে এমন পরিস্থিতি রয়েছে যা extendপদ্ধতিটি উপযুক্ত নয়: একটি forলুপে এবং Infoপ্রতিবার কোনও বস্তু উত্পন্ন করে এবং extendএটি আপনার তালিকায় সংরক্ষণ করার জন্য এটি ব্যর্থ হবে। ব্যতিক্রম নীচের মত:

প্রকারের ত্রুটি: 'তথ্য' অবজেক্টটি পুনরাবৃত্ত হয় না

আপনি যদি appendপদ্ধতিটি ব্যবহার করেন তবে ফলাফলটি ঠিক আছে। কারণ প্রতিবার এই extendপদ্ধতিটি ব্যবহার করার সময় , এটি সর্বদা এটি তালিকা বা অন্য কোনও সংগ্রহের ধরণ হিসাবে গণ্য করবে, পুনরাবৃত্তি করবে এবং এটি পূর্বের তালিকার পরে রাখবে। একটি নির্দিষ্ট বস্তুর পুনরাবৃত্তি করা যাবে না, স্পষ্টতই।


4

স্বজ্ঞাতভাবে তাদের পার্থক্য করা

l1 = ['a', 'b', 'c']
l2 = ['d', 'e', 'f']
l1.append(l2)
l1
['a', 'b', 'c', ['d', 'e', 'f']]

এটি l1তার দেহের অভ্যন্তরে কোনও দেহকে পুনরুত্পাদন করার মতো (নেস্টেড)।

# Reset l1 = ['a', 'b', 'c']
l1.extend(l2)
l1
['a', 'b', 'c', 'd', 'e', 'f']

এটি এমন যে দুটি বিচ্ছিন্ন ব্যক্তি বিবাহ করে এবং একটি সংযুক্ত পরিবার গঠন করে।

আমি আপনার রেফারেন্সের জন্য সমস্ত তালিকার পদ্ধতির একটি বিস্তৃত চিটপত্র তৈরি করি।

list_methods = {'Add': {'extend', 'append', 'insert'},
                'Remove': {'pop', 'remove', 'clear'}
                'Sort': {'reverse', 'sort'},
                'Search': {'count', 'index'},
                'Copy': {'copy'},
                }

2

extend(L)প্রদত্ত তালিকার সমস্ত আইটেম যুক্ত করে তালিকাটি প্রসারিত করে L

>>> a
[1, 2, 3]
a.extend([4])  #is eqivalent of a[len(a):] = [4]
>>> a
[1, 2, 3, 4]
a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a[len(a):] = [4]
>>> a
[1, 2, 3, 4]

0

appendকেবলমাত্র একটি আইটেম দ্বারা তালিকাটিকে (স্থানে) প্রসারিত করে , একক বস্তু (আর্গুমেন্ট হিসাবে) পাস করেছে passed

extendবস্তুটি যতটা পাস করেছে (আর্গুমেন্ট হিসাবে) যতগুলি আইটেম রয়েছে তার তালিকা (স্থানটিতে) "বাড়িয়ে তোলে" ।

এটি strবস্তুর জন্য কিছুটা বিভ্রান্তিকর হতে পারে ।

  1. আপনি যদি যুক্তি হিসাবে একটি স্ট্রিং পাস করেন: appendশেষে একটি একক স্ট্রিং আইটেম extendযুক্ত করবে তবে সেই স্ট্রিংয়ের দৈর্ঘ্যের হিসাবে অনেকগুলি "একক" 'স্ট' আইটেম যুক্ত হবে।
  2. আপনি যদি যুক্তি হিসাবে স্ট্রিংয়ের একটি তালিকা পাস করেন: appendতবুও শেষে একক 'তালিকা' আইটেম extendযুক্ত করবে এবং উত্তীর্ণ তালিকার দৈর্ঘ্যের হিসাবে অনেকগুলি 'তালিকা' আইটেম যুক্ত করবে।
def append_o(a_list, element):
    a_list.append(element)
    print('append:', end = ' ')
    for item in a_list:
        print(item, end = ',')
    print()

def extend_o(a_list, element):
    a_list.extend(element)
    print('extend:', end = ' ')
    for item in a_list:
        print(item, end = ',')
    print()
append_o(['ab'],'cd')

extend_o(['ab'],'cd')
append_o(['ab'],['cd', 'ef'])
extend_o(['ab'],['cd', 'ef'])
append_o(['ab'],['cd'])
extend_o(['ab'],['cd'])

সৃষ্টি করে:

append: ab,cd,
extend: ab,c,d,
append: ab,['cd', 'ef'],
extend: ab,cd,ef,
append: ab,['cd'],
extend: ab,cd,

0

পাইথনের এক্সটেনসিবিলিটি মেকানিজমগুলির মধ্যে একটি হ'ল সংযোজন এবং প্রসারিত।

সংযোজন: তালিকার শেষে একটি উপাদান যুক্ত করে।

my_list = [1,2,3,4]

তালিকায় একটি নতুন উপাদান যুক্ত করতে, আমরা নিম্নলিখিত পদ্ধতিতে সংযোজন পদ্ধতি ব্যবহার করতে পারি।

my_list.append(5)

নতুন উপাদান যুক্ত করা হবে এমন ডিফল্ট অবস্থান সর্বদা (দৈর্ঘ্য + 1) পজিশনে থাকে।

সন্নিবেশ: সন্নিবেশ পদ্ধতিটি সংযোজন সীমাবদ্ধতা অতিক্রম করতে ব্যবহৃত হয়েছিল। সন্নিবেশ সহ আমরা আমাদের নতুন উপাদানটি sertedোকাতে চাই সঠিক অবস্থানটি স্পষ্টভাবে সংজ্ঞায়িত করতে পারি।

সন্নিবেশের পদ্ধতি বর্ণনাকারী (সূচক, বস্তু)। এটি দুটি আর্গুমেন্ট লাগে, প্রথমটি সূচক হ'ল আমরা আমাদের উপাদানটি সন্নিবেশ করতে চাই এবং দ্বিতীয়টি উপাদানটি নিজেই।

Example: my_list = [1,2,3,4]
my_list[4, 'a']
my_list
[1,2,3,4,'a']

প্রসারিত করুন: যখন আমরা দুটি বা ততোধিক তালিকাকে একটি তালিকায় যোগ দিতে চাই তখন এটি খুব কার্যকর very প্রসারিত ছাড়াই, যদি আমরা দুটি তালিকায় যোগ দিতে চাই, ফলে থাকা অবজেক্টটিতে তালিকার একটি তালিকা থাকবে।

a = [1,2]
b = [3]
a.append(b)
print (a)
[1,2,[3]]

যদি আমরা পজ 2 এ উপাদানটি অ্যাক্সেস করার চেষ্টা করি তবে আমরা উপাদানটির পরিবর্তে একটি তালিকা ([3]) পাই। দুটি তালিকায় যোগ দিতে, আমাদের অ্যাপেন্ড ব্যবহার করতে হবে।

a = [1,2]
b = [3]
a.extend(b)
print (a)
[1,2,3]

একাধিক তালিকায় যোগ দিতে

a = [1]
b = [2]
c = [3]
a.extend(b+c)
print (a)
[1,2,3]

2
ইতিমধ্যে বহুবার উত্তর দেওয়া এমন প্রশ্নের উত্তর আপনি কেন দিচ্ছেন? এই প্রশ্নটি 10 ​​বছরের পুরনো ...
মাইক - এসএমটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.