পাইথনে, আমি কীভাবে কোনও তালিকার একটি নির্দিষ্ট সূচকে কোনও আইটেম স্থানান্তর করব?
পাইথনে, আমি কীভাবে কোনও তালিকার একটি নির্দিষ্ট সূচকে কোনও আইটেম স্থানান্তর করব?
উত্তর:
insertএকটি তালিকার পদ্ধতিটি ব্যবহার করুন :
l = list(...)
l.insert(index, item)
বিকল্পভাবে, আপনি একটি স্লাইস স্বরলিপি ব্যবহার করতে পারেন:
l[index:index] = [item]
আপনি যদি ইতিমধ্যে তালিকায় থাকা কোনও আইটেমটিকে নির্দিষ্ট অবস্থানে সরিয়ে নিতে চান তবে আপনাকে এটি মুছতে হবে এবং এটি নতুন অবস্থানে sertোকাতে হবে:
l.insert(newindex, l.pop(oldindex))
last index + 1ত্রুটি ছাড়াই sertোকাতে পারেন । উপাদানটি কেবলমাত্র সেই ক্ষেত্রে তালিকায় যুক্ত হয়।
a.insert(99999, 1) In [14]: a Out[14]: [...., 1]
একটি সামান্য সংক্ষিপ্ত সমাধান, এটি কেবলমাত্র আইটেমটি শেষ দিকে নিয়ে যায়, কোথাও নয়:
l += [l.pop(0)]
উদাহরণ স্বরূপ:
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
l.append(l.pop(0))। এটি কেবলমাত্র প্রান্তিক দীর্ঘ, তবে এটি অনেক বেশি পাঠযোগ্য।
আপনি যদি আইটেমের অবস্থানটি না জানেন তবে আপনাকে প্রথমে সূচিটি সন্ধান করতে হতে পারে:
old_index = list1.index(item)
তারপরে এটি সরান:
list1.insert(new_index, list1.pop(old_index))
বা IMHO একটি ক্লিনার উপায়:
try:
list1.remove(item)
list1.insert(new_index, item)
except ValueError:
pass
passবক্তব্যটি কুঁচকে ডেকে আছি ... ব্যতিক্রমগুলি কখনই আড়াল করবেন না - উদাহরণস্বরূপ ডিফল্ট জিনিসটি একটি ক্লিনার ত্রুটি বিবৃতি বা মুদ্রণ বিবৃতি প্রদান করা উচিত ... raise ValueError(f'Unable to move item to {new_index}')বা print(f'Moving item to {new_index} failed. List remains unchanged.')। passবলা যেতে পারে এমন কোনও ফাংশনে try_to_move_itemবা এমন কিছু ঠিক আছে যাতে এটি বুঝতে পারে যে অপারেশনটি নিঃশব্দে ব্যর্থ হতে পারে।
খুব সহজ সমাধান, তবে আপনাকে মূল অবস্থানের সূচি এবং নতুন অবস্থানের সূচকটি জানতে হবে:
list1[index1],list1[index2]=list1[index2],list1[index1]
সময়সীমার সাথে একই তালিকার মধ্যে একটি আইটেম স্থানান্তরিত করার জন্য আমি কয়েকটি পদ্ধতির প্রোফাইল করেছি। J> i:
┌──────────┬──────────────────────┐ .4 14.4usec │ x [i: i] = x.pop (j), │ .5 14.5usec │ x [i: i] = [x.pop (j)] │ │ │ 15.2usec │ x.insert (i, x.pop (j)) │ │ └──────────┴──────────────────────┘
এবং j <= i:
┌──────────┬───────────────────────────┐ .4 14.4 ইউজেনস │ x [i: i] = x [জে],; ডেল এক্স [জে] │ │ │ 14.4usec │ x [i: i] = [x [জে]]; ডেল এক্স [জে] │ .4 15.4usec │ x.insert (i, x [j]); ডেল এক্স [জে] │ │ └──────────┴───────────────────────────┘
আপনি কেবল কয়েকবার এটি ব্যবহার করলে বিশাল পার্থক্য নয়, তবে আপনি যদি ম্যানুয়াল বাছাইয়ের মতো ভারী জিনিসগুলি করেন তবে দ্রুততমটি নেওয়া গুরুত্বপূর্ণ। অন্যথায়, আমি সর্বাধিক পঠনযোগ্য বলে মনে করি এমন একটি গ্রহণের পরামর্শ দেব।