• 0

من الأسرع؟ القوائم أو Sets في بايثون؟

أريد معرفة ما هيكل البيانات الأسرع، هل هي القوائم أم Sets؟ إذا افترضنا أن الترتيب غير مهم وسأبحث عن التكرارات في وقت لاحق، فهل Set أبطئ من القوائم في بايثون؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

تعتمد الإجابة على سؤالك حول ما الذي تريد فعله بهذا الهيكل، فـ Set أسرع من القوائم في بعض الحالات مثلا إذا أردت التأكد من وجود كائن معين في set (عن طريق x in s مثلا)، ولكنها ستكون أبطئ من القوائم في حالات أخرى مثل الدوران حول العناصر عن طريق حلقة التكرار.
أمثلة حول سرعة الدوران:

>>> def iter_test(iterable):
...     for i in iterable:
...         pass
...
>>> from timeit import timeit
>>> timeit(
...     "iter_test(iterable)",
...     setup="from __main__ import iter_test; iterable = set(range(10000))",
...     number=100000)
12.666952133178711
>>> timeit(
...     "iter_test(iterable)",
...     setup="from __main__ import iter_test; iterable = list(range(10000))",
...     number=100000)
9.917098999023438
>>> timeit(
...     "iter_test(iterable)",
...     setup="from __main__ import iter_test; iterable = tuple(range(10000))",
...     number=100000)
9.865639209747314

أمثلة حول التأكد من وجود كائن:

>>> def in_test(iterable):
...     for i in range(1000):
...         if i in iterable:
...             pass
...
>>> timeit(
...     "in_test(iterable)",
...     setup="from __main__ import in_test; iterable = set(range(1000))",
...     number=10000)
0.5591847896575928
>>> timeit(
...     "in_test(iterable)",
...     setup="from __main__ import in_test; iterable = list(range(1000))",
...     number=10000)
50.18339991569519
>>> timeit(
...     "in_test(iterable)",
...     setup="from __main__ import in_test; iterable = tuple(range(1000))",
...     number=10000)
51.597304821014404

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن