import itertools
Num = 11

base = list(range(1,Num+1))

Permutations = list(itertools.permutations(base))

मुझे इसे चलाने की कोशिश में स्मृति त्रुटि मिल रही है। हकीकत में मुझे केवल 1 (संख्या -1) उत्पन्न करने की आवश्यकता है! क्रमपरिवर्तन लेकिन मुझे यकीन नहीं है कि कैसे (इसलिए यदि संख्या = 7 मुझे पहले 6! = 720 क्रमपरिवर्तन उत्पन्न करने की आवश्यकता होगी)। लेकिन मैं आदर्श रूप से संख्या के उच्च मूल्यों के लिए क्रमपरिवर्तन उत्पन्न करने में सक्षम होना चाहता हूं, इसलिए कोई भी सुझाव बहुत अच्छा होगा

2
user8430559 26 मार्च 2020, 18:00

1 उत्तर

सबसे बढ़िया उत्तर

range() और permutation() दोनों जेनरेटर लौटाते हैं जो मांग पर आइटम उत्पन्न करते हैं। आपको list() को कॉल करने और उन्हें सूचियों में बदलने की आवश्यकता नहीं है। बस उन पर सीधे पुनरावृति करें और एक-एक करके वस्तुओं तक पहुंचें।

num = 11
base = range(1, num+1)
permutations = itertools.permutations(base)

for permutation in permutations:
    # Do something with `permutation`.

(ध्यान दें कि जनरेटर का उपयोग केवल एक बार किया जा सकता है। यदि आप क्रमपरिवर्तन को एक से अधिक बार दोहराना चाहते हैं तो आपको itertools.permutations() को कई बार कॉल करना होगा।)

के बाद के लिए रुकें। em>n आइटम itertools.islice() का उपयोग करें:

for permutation in itertools.islice(permutations, n):
    # Do something with `permutation`.

आप शुरुआत में भी आइटम छोड़ सकते हैं। यह पहले पांच क्रमपरिवर्तन छोड़ देगा:

for permutation in itertools.islice(permutations, 5, n):
    # Do something with `permutation`.

यदि आप क्रमपरिवर्तनों को गिनना चाहते हैं तो आप enumerate() जोड़ सकते हैं, जो प्रत्येक प्रविष्टि के लिए एक अनुक्रमणिका संलग्न करता है:

for i, permutation in enumerate(itertools.islice(permutations, n)):
    # Skip the fifth permutation.
    if i == 4:
        continue

    # Do something with `permutation`.

वैसे, कृपया चर नामों के लिए लोअरकेस का उपयोग करें। केवल वर्ग के नाम बड़े अक्षरों में लिखे जाने चाहिए।

3
John Kugelman 26 मार्च 2020, 15:23