একটি আইটেম একটি তালিকার ভিতরে সরানো?


উত্তর:


160

insertএকটি তালিকার পদ্ধতিটি ব্যবহার করুন :

l = list(...)
l.insert(index, item)

বিকল্পভাবে, আপনি একটি স্লাইস স্বরলিপি ব্যবহার করতে পারেন:

l[index:index] = [item]

আপনি যদি ইতিমধ্যে তালিকায় থাকা কোনও আইটেমটিকে নির্দিষ্ট অবস্থানে সরিয়ে নিতে চান তবে আপনাকে এটি মুছতে হবে এবং এটি নতুন অবস্থানে sertোকাতে হবে:

l.insert(newindex, l.pop(oldindex))

22
কেবল মনে রাখবেন যে সারণি / পপ পদ্ধতির সাথে তালিকায় ইতিমধ্যে একটি আইটেমটি সরানো আপনার তালিকার সামনে বা পিছনের দিকে অগ্রসর হচ্ছেন তা নির্ভর করে বিভিন্ন আচরণ করবে। বাম দিকে সরানো আপনি যে জিনিসটি পছন্দ করেছেন তার আগে sertোকান। আপনি যে আইটেমটি পছন্দ করেছেন তার পরে আপনি সন্নিবেশ করানো পিছনে সরে যাচ্ছেন। তালিকার শেষের দিকে যাওয়ার জন্য পরীক্ষা করুন (সূচী ত্রুটি)।
এমকারাস

একাধিক উপাদান কীভাবে সরানো যায়? একটি তালিকা দেওয়া হয়েছে একটি = [1,2,3,4,5,6,7,8,9], কীভাবে এটিকে [1,2, [3,4,5], 6,7,8,9 এ রূপান্তর করতে হবে ]? এটি কি এক ধাপে বা একটি তালিকা বোঝার সাথে করা যায়?
g33kz0r

@ এমকারাস আমি পাইথন 3.5 এর সাথে এটি পরীক্ষা করেছি এবং আপনি last index + 1ত্রুটি ছাড়াই sertোকাতে পারেন । উপাদানটি কেবলমাত্র সেই ক্ষেত্রে তালিকায় যুক্ত হয়।
ব্যবহারকারী2061057

@ ব্যবহারকারী2061057 সঠিক: এমনকি বড় সূচীর শেষে জিনিসগুলি সন্নিবেশ করানো হবে। a.insert(99999, 1) In [14]: a Out[14]: [...., 1]
লী পেনকম্যান

1
যারা শেষে আইটেমটি সন্নিবেশ করানোর জন্য সূচক -১ ব্যবহার করার চেষ্টা করছেন তাদের পরিবর্তে আপনাকে লেন (এল) ব্যবহার করতে হবে।
এনডিএ

31

একটি সামান্য সংক্ষিপ্ত সমাধান, এটি কেবলমাত্র আইটেমটি শেষ দিকে নিয়ে যায়, কোথাও নয়:

l += [l.pop(0)]

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

>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]

13
আপনি পাশাপাশি ব্যবহার করতে পারেন l.append(l.pop(0))। এটি কেবলমাত্র প্রান্তিক দীর্ঘ, তবে এটি অনেক বেশি পাঠযোগ্য।
coredumperror

পরিবর্তে আমি কীভাবে এটি শুরুতে সরাতে সক্ষম হতে পারি?

19

আপনি যদি আইটেমের অবস্থানটি না জানেন তবে আপনাকে প্রথমে সূচিটি সন্ধান করতে হতে পারে:

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

6
আমি মনে করি আমি আপনার 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বা এমন কিছু ঠিক আছে যাতে এটি বুঝতে পারে যে অপারেশনটি নিঃশব্দে ব্যর্থ হতে পারে।
flutefreak7

3

খুব সহজ সমাধান, তবে আপনাকে মূল অবস্থানের সূচি এবং নতুন অবস্থানের সূচকটি জানতে হবে:

list1[index1],list1[index2]=list1[index2],list1[index1]

6
এটি কোনও পরিবর্তন নয়, চলাচল নয়।
জাজলিন

0

সময়সীমার সাথে একই তালিকার মধ্যে একটি আইটেম স্থানান্তরিত করার জন্য আমি কয়েকটি পদ্ধতির প্রোফাইল করেছি। 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]); ডেল এক্স [জে] │ │
└──────────┴───────────────────────────┘

আপনি কেবল কয়েকবার এটি ব্যবহার করলে বিশাল পার্থক্য নয়, তবে আপনি যদি ম্যানুয়াল বাছাইয়ের মতো ভারী জিনিসগুলি করেন তবে দ্রুততমটি নেওয়া গুরুত্বপূর্ণ। অন্যথায়, আমি সর্বাধিক পঠনযোগ্য বলে মনে করি এমন একটি গ্রহণের পরামর্শ দেব।

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