الفرق بين المراجعتين لصفحة: «Python/itertools/combinations»
سطر 68: | سطر 68: | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* [[Python/iterators|المكرِّرات Iterators في بايثون]]. | * [[Python/iterators|المكرِّرات Iterators في بايثون]]. | ||
* [[Python/itertools/permutations|<code>itertools.permutations</code>]]. | * [[Python/itertools/permutations|<code>itertools.permutations</code>]]: تُعيد تبادلات بطول مُحدّد من الكائن القابل للتّكرار المُعطى. | ||
* [[Python/generators|المولدات Generators في بايثون]]. | * [[Python/generators|المولدات Generators في بايثون]]. | ||
مراجعة 01:41، 13 يونيو 2018
تعيد الدّالة itertools.combinations()
تسلسلات فرعيّة (subsequences) تُعدّ تجميعاتٍ ذات طولٍ مُحدّد لعناصر الكائن القابل للتّكرار المُعطى.
تُنتَج التّجميعات حسب الترتيب المُعجميّ (lexicographic). ما يعني بأنّ الصّفوف النّاتجة ستكون مُرتّبةً إن كان الكائن القابل للتّكرار المُعطى مُرتّبًا.
تُعامَل العناصر على أنّها فريدة حسب موقعها، وليس حسب قيمها. لذا إن كانت عناصر الكائن القابل للتّكرار المُدخَل فريدةً فلن تُكرّر أيّة قيم في كلّ تجميعة.
البنية العامة
itertools.combinations(iterable, r)
المعاملات
iterable
الكائن القابل للتّكرار.
r
طول الصّفوف النّاتجة.
القيمة المعادة
صفوف بالطول المُعطى للمُعامل r
تحتوي على تجميعات للعناصر المتواجدة في الكائن القابل للتّكرار المُعطى.
أمثلة
المثال التّالي يوضّح كيفيّة عمل هذه الدّالة:
>>> c = itertools.combinations('ABCD', 2)
>>> list(c)
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]
ملاحظات
الدّالة مُكافئة لما يلي:
def combinations(iterable, r):
# combinations('ABCD', 2) --> AB AC AD BC BD CD
# combinations(range(4), 3) --> 012 013 023 123
pool = tuple(iterable)
n = len(pool)
if r > n:
return
indices = list(range(r))
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(r)):
if indices[i] != i + n - r:
break
else:
return
indices[i] += 1
for j in range(i+1, r):
indices[j] = indices[j-1] + 1
yield tuple(pool[i] for i in indices)
يُمكن كذلك تمثيل شيفرة الدّالة itertools.combinations()
كتسلسل فرعيّ للدّالة itertools.permutations()
بعد ترشيح المُدخلات التي لا تكون فيها العناصر مُرتّبة (حسب موقعها في تجمّع المُدخلات):
def combinations(iterable, r):
pool = tuple(iterable)
n = len(pool)
for indices in permutations(range(n), r):
if sorted(indices) == list(indices):
yield tuple(pool[i] for i in indices)
عدد العناصر المُعادة هو n! / r! / (n-r)!
عند 0 <= r <= n
أو صفرًا عند r > n
.
انظر أيضًا
- المكرِّرات Iterators في بايثون.
itertools.permutations
: تُعيد تبادلات بطول مُحدّد من الكائن القابل للتّكرار المُعطى.- المولدات Generators في بايثون.