একটি স্থান মধ্যে পদ্ধতি
এই পদ্ধতিটি চতুর্ভুজযুক্ত, কারণ তালিকার প্রতিটি উপাদানগুলির জন্য তালিকায় আমরা একটি রৈখিক অনুসন্ধান করে থাকি (এর কারণে আমাদের তালিকাটি পুনরায় সাজানোর জন্য ব্যয় যুক্ত করতে হবে del
)।
এটি বলেছে যে, যদি আমরা তালিকার শেষ থেকে শুরু করি এবং তার বামে উপ-তালিকার উপস্থিত প্রতিটি পদকে অপসারণের মূল দিকে এগিয়ে যাই তবে এটি জায়গায় কাজ করা সম্ভব said
কোডে এই ধারণাটি সহজভাবে
for i in range(len(l)-1,0,-1):
if l[i] in l[:i]: del l[i]
বাস্তবায়নের একটি সাধারণ পরীক্ষা
In [91]: from random import randint, seed
In [92]: seed('20080808') ; l = [randint(1,6) for _ in range(12)] # Beijing Olympics
In [93]: for i in range(len(l)-1,0,-1):
...: print(l)
...: print(i, l[i], l[:i], end='')
...: if l[i] in l[:i]:
...: print( ': remove', l[i])
...: del l[i]
...: else:
...: print()
...: print(l)
[6, 5, 1, 4, 6, 1, 6, 2, 2, 4, 5, 2]
11 2 [6, 5, 1, 4, 6, 1, 6, 2, 2, 4, 5]: remove 2
[6, 5, 1, 4, 6, 1, 6, 2, 2, 4, 5]
10 5 [6, 5, 1, 4, 6, 1, 6, 2, 2, 4]: remove 5
[6, 5, 1, 4, 6, 1, 6, 2, 2, 4]
9 4 [6, 5, 1, 4, 6, 1, 6, 2, 2]: remove 4
[6, 5, 1, 4, 6, 1, 6, 2, 2]
8 2 [6, 5, 1, 4, 6, 1, 6, 2]: remove 2
[6, 5, 1, 4, 6, 1, 6, 2]
7 2 [6, 5, 1, 4, 6, 1, 6]
[6, 5, 1, 4, 6, 1, 6, 2]
6 6 [6, 5, 1, 4, 6, 1]: remove 6
[6, 5, 1, 4, 6, 1, 2]
5 1 [6, 5, 1, 4, 6]: remove 1
[6, 5, 1, 4, 6, 2]
4 6 [6, 5, 1, 4]: remove 6
[6, 5, 1, 4, 2]
3 4 [6, 5, 1]
[6, 5, 1, 4, 2]
2 1 [6, 5]
[6, 5, 1, 4, 2]
1 5 [6]
[6, 5, 1, 4, 2]
In [94]:
seen.add
পুনরাবৃত্তির মধ্যে পরিবর্তন করতে পারে, এবং রানটাইমটি এতটা স্মার্ট নয় যে এটি রুল করতে পারে। নিরাপদে খেলতে, এটিতে প্রতিবার অবজেক্টটি পরীক্ষা করতে হবে। - আপনি যদি বাইটোকোডটি দিয়েdis.dis(f)
দেখেন তবে দেখতে পাবেন যে এটি প্রতিটি পুনরাবৃত্তিতে সদস্যটিরLOAD_ATTR
জন্য কার্যকর করেadd
। ideone.com/tz1Tll