ঠিক আছে, ট্রুফা যেমন ইতিমধ্যে দেখিয়েছে, প্রদত্ত সূচকে টিপলের উপাদান প্রতিস্থাপনের মূলত দুটি উপায় রয়েছে। হয় টিপলটিকে একটি তালিকায় রূপান্তর করুন, উপাদানটি প্রতিস্থাপন করুন এবং ফিরে রূপান্তর করুন, বা সংক্ষিপ্তকরণের মাধ্যমে একটি নতুন টিপল তৈরি করুন।
In [1]: def replace_at_index1(tup, ix, val):
...: lst = list(tup)
...: lst[ix] = val
...: return tuple(lst)
...:
In [2]: def replace_at_index2(tup, ix, val):
...: return tup[:ix] + (val,) + tup[ix+1:]
...:
সুতরাং, কোন পদ্ধতিটি আরও ভাল, এটি দ্রুত?
এটি দেখা যাচ্ছে যে সংক্ষিপ্ত টিপলগুলির জন্য (পাইথন ৩.৩-এ), কনক্যাটেনশন আসলে দ্রুত!
In [3]: d = tuple(range(10))
In [4]: %timeit replace_at_index1(d, 5, 99)
1000000 loops, best of 3: 872 ns per loop
In [5]: %timeit replace_at_index2(d, 5, 99)
1000000 loops, best of 3: 642 ns per loop
তবুও যদি আমরা লম্বা টিপলগুলিতে নজর রাখি তবে তালিকা রূপান্তর হ'ল উপায়:
In [6]: k = tuple(range(1000))
In [7]: %timeit replace_at_index1(k, 500, 99)
100000 loops, best of 3: 9.08 µs per loop
In [8]: %timeit replace_at_index2(k, 500, 99)
100000 loops, best of 3: 10.1 µs per loop
খুব দীর্ঘ টিউপসগুলির জন্য, তালিকা রূপান্তর যথেষ্ট উন্নত!
In [9]: m = tuple(range(1000000))
In [10]: %timeit replace_at_index1(m, 500000, 99)
10 loops, best of 3: 26.6 ms per loop
In [11]: %timeit replace_at_index2(m, 500000, 99)
10 loops, best of 3: 35.9 ms per loop
এছাড়াও, সংক্ষিপ্তকরণ পদ্ধতির কার্য সম্পাদন সূচকের উপর নির্ভর করে যেখানে আমরা উপাদানটি প্রতিস্থাপন করি। তালিকা পদ্ধতির জন্য, সূচকটি অপ্রাসঙ্গিক।
In [12]: %timeit replace_at_index1(m, 900000, 99)
10 loops, best of 3: 26.6 ms per loop
In [13]: %timeit replace_at_index2(m, 900000, 99)
10 loops, best of 3: 49.2 ms per loop
সুতরাং: আপনার টিপলটি যদি সংক্ষিপ্ত হয় তবে টুকরো টুকরো টুকরো টুকরো হয়ে উঠুন। যদি এটি দীর্ঘ হয় তবে তালিকার রূপান্তরটি করুন!