একটি তালিকার একটি নির্দিষ্ট সূচীতে একটি উপাদান sertোকান এবং আপডেট তালিকাটি ফেরত দিন


102

আমার আছে এটা:

>>> a = [1, 2, 4]
>>> print a
[1, 2, 4]

>>> print a.insert(2, 3)
None

>>> print a
[1, 2, 3, 4]

>>> b = a.insert(3, 6)
>>> print b
None

>>> print a
[1, 2, 3, 6, 4]

মূল তালিকাটি জায়গায় রাখার পরিবর্তে ফলাফল হিসাবে আমি আপডেট তালিকা পেতে পারি এমন কোনও উপায় আছে?


11
b = a[:].insert(2,3)বেশ সংক্ষিপ্ত বলে মনে হচ্ছে, মূল তালিকাটি প্রভাবিত করে না এবং এটি বর্ণনামূলক।
— mkoistinen

6
@ mkoistinen এটি আমার পক্ষে কাজ করে না। >>> a = [1, 2, 3, 4] >>> b = a[:].insert(2, 5) >>> print b None
— স্পার্কএন্ডশাইন

উত্তর:


91

l.insert(index, obj)আসলে কিছুই ফেরায় না এটি কেবল তালিকা আপডেট করে।

এটিও যেমন বলেছেন, আপনি এটি করতে পারেন b = a[:index] + [obj] + a[index:]। তবে, আরেকটি উপায় হ'ল:

a = [1, 2, 4]
b = a[:]
b.insert(2, 3)

56
আপনি যদি পঠনযোগ্য কোডের 3 টি লাইন সহ্য করতে না পারেন তবে এটি কোনও ফাংশনে রেখে কল করুন।
— আইসআর্ডার

60

সর্বাধিক কর্মক্ষমতা দক্ষ পদ্ধতির approach

আপনি তালিকায় স্লাইস ইনডেক্সিং ব্যবহার করে উপাদানটি সন্নিবেশ করতে পারেন । উদাহরণ স্বরূপ:

>>> a = [1, 2, 4]
>>> insert_at = 2  # Index at which you want to insert item

>>> b = a[:]   # Created copy of list "a" as "b".
               # Skip this step if you are ok with modifying the original list

>>> b[insert_at:insert_at] = [3]  # Insert "3" within "b"
>>> b
[1, 2, 3, 4]

প্রদত্ত সূচকে একসাথে একাধিক উপাদান সন্নিবেশ করার জন্য , আপনাকে যা করতে হবে তা হ'ল listযেটি একাধিক উপাদান আপনি সন্নিবেশ করতে চান তা ব্যবহার করা। উদাহরণ স্বরূপ:

>>> a = [1, 2, 4]
>>> insert_at = 2   # Index starting from which multiple elements will be inserted

# List of elements that you want to insert together at "index_at" (above) position
>>> insert_elements = [3, 5, 6]

>>> a[insert_at:insert_at] = insert_elements
>>> a   # [3, 5, 6] are inserted together in `a` starting at index "2"
[1, 2, 3, 5, 6, 4]

বিকল্প তালিকা তালিকাগুলি ব্যবহার করে (তবে কার্য সম্পাদনের ক্ষেত্রে খুব ধীর) :

একটি বিকল্প হিসাবে, এটি ব্যবহার অর্জন করা যেতে পারে তালিকা ধী সঙ্গে enumerateখুব। (তবে দয়া করে এটি এভাবে করবেন না It এটি কেবল উদাহরণের জন্য) :

>>> a = [1, 2, 4]
>>> insert_at = 2

>>> b = [y for i, x in enumerate(a) for y in ((3, x) if i == insert_at else (x, ))]
>>> b
[1, 2, 3, 4]

সমস্ত সমাধানের পারফরম্যান্স তুলনা

timeitপাইথন ৩.৪.৫-এর জন্য 1000 টি উপাদানের তালিকার সাথে সমস্ত উত্তরের তুলনা এখানে :

  • কাটা সন্নিবেশ ব্যবহার করে আমার উত্তর - দ্রুততম (প্রতি লুপে 3.08% সেকেন্ড)

     mquadri$ python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b[500:500] = [3]"
     100000 loops, best of 3: 3.08 µsec per loop
    
  • কাটা তালিকার একত্রিত হওয়ার উপর ভিত্তি করে ATOzTOA- এর গৃহীত উত্তর - দ্বিতীয় (প্রতি লুপে 6.71%)

     mquadri$ python3 -m timeit -s "a = list(range(1000))" "b = a[:500] + [3] + a[500:]"
     100000 loops, best of 3: 6.71 µsec per loop
    
  • রাশি পঞ্চালের উত্তর সর্বাধিক ভোটের সাহায্যেlist.insert(...)- তৃতীয় (প্রতি লুপে 26.5 ইউএসসি)

     python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b.insert(500, 3)"
     10000 loops, best of 3: 26.5 µsec per loop
    
  • তালিকা সংমিশ্রণের সাথে আমার উত্তর এবংenumerate- চতুর্থ (প্রতি লুপে 168 µ সেক সহ খুব ধীর)

     mquadri$ python3 -m timeit -s "a = list(range(1000))" "[y for i, x in enumerate(a) for y in ((3, x) if i == 500 else (x, )) ]"
     10000 loops, best of 3: 168 µsec per loop
    

4
আমি সত্যিই এই ফলাফলটি পছন্দ করি কারণ সমস্যাটি সহজেই সমাধান করার জন্য এটি প্রসারিত হয়, যদি আমি 3, 3.5সেই তালিকায় মানগুলি সন্নিবেশ করতে চাই তবে (ক্রমে) -> a[2:2] = [3,3.5]। খুব ঝরঝরে
— মিনিলিণীম

4
কীভাবে একটি [2: 2] = a_list কাজ করে? একটি [২: ২] মূলত ২ য় সূচক থেকে প্রথম তম সূচক (২-১) তে শুরু হচ্ছে তবে এগিয়ে দিক যার অর্থ খালি [] তালিকা। কিভাবে এটি প্রসারিত? আমরা যদি [2: 3: -1] করি তবে এটি কার্যকর হয় না।
— স্যামকোডস

দুর্দান্ত উত্তর। আমি ভাবছি সবচেয়ে ভাল পছন্দের জটিলতা যদি ও (1) হয়? যদি তাই হয় তবে কেন?
— লারনার ঝাং

এই উত্তরটি আপডেট করা দরকার। একবারের জন্য আমি পাইথন ৩.৪ (এমনকি আমি list.insertঅ্যাসাইনমেন্টের মধ্যে একটি ফ্যাক্টর 2 পাই ) এবং পাইথনের ৩.৮-তে এই পার্থক্যটি সম্পূর্ণভাবে অদৃশ্য হয়ে গেছে the কোনও উপাদান sertোকানোর সুস্পষ্ট উপায়টি হ'ল list.insertস্পষ্টতই ব্যবহার করা ।
— a_guest

39

আমি পেয়েছি সবচেয়ে কম: b = a[:2] + [3] + a[2:]

>>>
>>> a = [1, 2, 4]
>>> print a
[1, 2, 4]
>>> b = a[:2] + [3] + a[2:]
>>> print a
[1, 2, 4]
>>> print b
[1, 2, 3, 4]

কোডের লাইন সংখ্যা কোড মানের একটি ভাল পরিমাপ নয়। পারফরম্যান্স এবং পঠনযোগ্যতার কারণে এই পদ্ধতির ত্রুটি রয়েছে।
— a_guest

0

সবচেয়ে পরিষ্কার পদ্ধতির তালিকাটি অনুলিপি করা এবং তারপরে অনুলিপিটি অবজেক্টটি .োকানো। পাইথন 3 এ মাধ্যমে এটি করা যেতে পারে list.copy:

new = old.copy()
new.insert(index, value)

পাইথন 2-এ তালিকার অনুলিপিটি অর্জন করার মাধ্যমে এটি অর্জন করা যেতে পারে new = old[:](এটি পাইথন 3-তেও কাজ করে)।

পারফরম্যান্সের ক্ষেত্রে অন্যান্য প্রস্তাবিত পদ্ধতির সাথে কোনও পার্থক্য নেই:

$ python --version
Python 3.8.1
$ python -m timeit -s "a = list(range(1000))" "b = a.copy(); b.insert(500, 3)"
100000 loops, best of 5: 2.84 µsec per loop
$ python -m timeit -s "a = list(range(1000))" "b = a.copy(); b[500:500] = (3,)"
100000 loops, best of 5: 2.76 µsec per loop

-2

ব্যবহার করুন পাইথন তালিকা সন্নিবেশ () মেথড । ব্যবহার:

#বাক্য গঠন

সন্নিবেশ () পদ্ধতির জন্য সিনট্যাক্স -

list.insert(index, obj)

# প্যারামিটার

  • সূচি - এটি সূচক যেখানে বস্তুর আপত্তিটি সন্নিবেশ করা প্রয়োজন।
  • আপত্তি - এটি প্রদত্ত তালিকায় theোকানো অবজেক্ট।

# রিটার্ন মান এই পদ্ধতিটি কোনও মান দেয় না, তবে এটি প্রদত্ত সূচকে প্রদত্ত উপাদানটি সন্নিবেশ করে।

উদাহরণ:

a = [1,2,4,5]

a.insert(2,3)

print(a)

ফিরে আসে [1, 2, 3, 4, 5]


4
এটি প্রশ্নের উত্তর দেয় না।
— গুস্তাভ বার্ট্রাম

5
প্রশ্ন সুনির্দিষ্ট ছিল: Is there anyway I can get the updated list as result, instead of updating the original list in place?আপনার উত্তরটি বিপরীত করে।
— লাসল্লোটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.