मुझे इसी तरह की समस्या थी और इसका समाधान यहां मिला । यह किसी भी मॉड्यूल को आयात किए बिना काम करता है।
एक सूची की तरह:
people = ["Lisa","Pam","Phil","John"]
एक सरलीकृत एक-पंक्ति समाधान इस तरह दिखेगा।
डुप्लिकेट सहित सभी संभावित जोड़े :
result = [foo(p1, p2) for p1 in people for p2 in people]
डुप्लिकेट को छोड़कर सभी संभावित जोड़े :
result = [foo(p1, p2) for p1 in people for p2 in people if p1 != p2]
अद्वितीय जोड़े , जहां आदेश अप्रासंगिक है:
result = [foo(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
यदि आप संचालन नहीं करना चाहते हैं, लेकिन केवल जोड़े प्राप्त करना चाहते हैं, तो फ़ंक्शन को हटा दें fooऔर सिर्फ एक ट्यूपल का उपयोग करना पर्याप्त होगा।
डुप्लिकेट सहित सभी संभावित जोड़े :
list_of_pairs = [(p1, p2) for p1 in people for p2 in people]
परिणाम:
('Lisa', 'Lisa')
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Lisa')
('Pam', 'Pam')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'Lisa')
('Phil', 'Pam')
('Phil', 'Phil')
('Phil', 'John')
('John', 'Lisa')
('John', 'Pam')
('John', 'Phil')
('John', 'John')
डुप्लिकेट को छोड़कर सभी संभावित जोड़े :
list_of_pairs = [(p1, p2) for p1 in people for p2 in people if p1 != p2]
परिणाम:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Lisa')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'Lisa')
('Phil', 'Pam')
('Phil', 'John')
('John', 'Lisa')
('John', 'Pam')
('John', 'Phil')
अद्वितीय जोड़े , जहां आदेश अप्रासंगिक है:
list_of_pairs = [(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
परिणाम:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'John')
संपादित करें: इस समाधान को सरल बनाने के लिए कार्य करने के बाद, मैंने महसूस किया कि यह एडम रोसेनफील्ड की तुलना में एक ही दृष्टिकोण है। मुझे उम्मीद है कि बड़ा विवरण इसे बेहतर समझने में कुछ मदद करता है।