मैंने पहले कभी लूप के लिए पायथन में इस प्रकार की स्थिति का सामना नहीं किया है।

मेरे पास Names (key) और Regions (value) का शब्दकोश है। मैं प्रत्येक नाम को दो अन्य नामों से मिलाना चाहता हूं। मिलान किया गया नाम स्वयं नहीं हो सकता और तत्वों को उलटना एक मान्य मिलान (1,2) = (2,1) नहीं है। मैं नहीं चाहता कि एक ही क्षेत्र के लोग एक साथ मिलें (जब तक कि यह असंभव न हो जाए)।

dict = {
    "Tom":"Canada",
    "Jerry":"USA",
    "Peter":"USA",
    "Pan":"Canada",
    "Edgar":"France"
    }

वांछित संभावित आउटपुट: [('Tom','Jerry'),('Tom','Peter'),('Jerry','Pan'),('Pan','Peter'),('Edgar','Peter'),('Edgar','Jerry')]

हर कोई दो बार दिखाई देता है, लेकिन एडगर के लिए एक अलग क्षेत्र के नामों के साथ 2 मैच करने के लिए जैरी और पीटर अधिक दिखाई देते हैं (जेरी और पीटर को यहां यादृच्छिक रूप से चुना जाना चाहिए) Count: Tom: 2, Jerry: 3, Peter: 3, Pan: 2, Edgar: 2

मेरा दृष्टिकोण नामों को एक सूची में परिवर्तित करना है, उन्हें शफ़ल करना है, फिर कस्टम फ़ंक्शन में ज़िप का उपयोग करके टपल जोड़े बनाना है। समारोह पूरा होने के बाद। मैं एक for का उपयोग उसी क्षेत्र से युग्मों की जाँच के लिए करता हूँ, यदि समान युग्मन क्षेत्र मौजूद है, तो कस्टम फ़ंक्शन को फिर से चलाएँ। किसी कारण से, जब मैं परिणाम प्रिंट करता हूं, तब भी मुझे उन्हीं क्षेत्रों के बीच युग्म दिखाई देते हैं। मुझे यहां क्या समझ नहीं आ रहा है?

    import random
    names=list(dict.keys())
    def pairing(x):
        random.shuffle(x)
        #each person is tupled twice, once with the neighbor on each side
        pairs = list(zip(x, x[1:]+x[:1]))
        return pairs

    pairs=pairing(names) #assigns variable from function to 'pairs'

    for matchup in pairs:
        if dict[matchup[0]]==dict[matchup[1]]:    
            break
            pairing(names)

    pairs=pairing(names)
    for matchup in pairs:
        print(matchup[0] ,dict[matchup[0]] , matchup[1] , dict[matchup[1]])

बस इसे देखकर, लूप के लिए कुछ स्पष्ट रूप से टूटा हुआ है, कृपया मदद करें!

मैंने लूप के लिए if के बजाय while की कोशिश की है, लेकिन यह काम नहीं किया।

0
machump 9 नवम्बर 2018, 22:46

1 उत्तर

सबसे बढ़िया उत्तर
from itertools import combinations
import pandas as pd
import random

dict={'your dictionary'}

#create function to pair names together
def pairing(x):
    random.shuffle(x)
    #each person is tupled twice, once with the neighbor on each side
    pairs = list(zip(x, x[1:]+x[:1]))
    for matchup in pairs:
        if dict[matchup[0]]==dict[matchup[1]]: #if someone's gym matches their opponent's gym in dictionary, re-run this function
            return pairing(x) 
    return pairs

pairs=pairing(names)
for matchup in pairs:
    print(matchup[0] ,dict[matchup[0]] , matchup[1] , dict[matchup[1]])

चाल कस्टम फ़ंक्शन के अंदर return pairing(x) है। यह नई जोड़ी लौटाएगा यदि टपल में कोई भी तत्व शब्दकोश में समान मान साझा करता है। यदि if statement के अंदर, आप pairing(x) जाते हैं, तो return pair, यह मूल टपल सूची लौटाएगा जिसमें डुप्लीकेट शामिल हैं।

0
machump 10 नवम्बर 2018, 00:50