निम्नलिखित टुपल लें:

t = (('x', (1, 2, 3), ('A', 'B')),
     ('y', (5, 6), ('E', 'G')))

टुपल को कार्तीय में इस प्रकार कैसे बनाया जा सकता है:

(('x', 1, 'A'),
 ('x', 1, 'B'),
 ('x', 2, 'A'),
 ...
 ('y', 6, 'G')

निम्नलिखित काम नहीं करता है:

from itertools import product
[(product(zip(a[0], a[1], a[2]))) for a in t]
1
reservoirinvest 8 पद 2018, 06:42

2 जवाब

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

zip का उपयोग करने की आवश्यकता नहीं है, बस प्रत्येक टपल को अनपैक करें:

from itertools import product

data = (('x', (1, 2, 3), ('A', 'B')), ('y', (5, 6), ('E', 'G')))

result = [p for tup in data for p in product(*tup)]

for p in result:
    print(p)

आउटपुट

('x', 1, 'A')
('x', 1, 'B')
('x', 2, 'A')
('x', 2, 'B')
('x', 3, 'A')
('x', 3, 'B')
('y', 5, 'E')
('y', 5, 'G')
('y', 6, 'E')
('y', 6, 'G')
4
Dani Mesejo 8 पद 2018, 06:49

यह XY समस्या का एक चरम उदाहरण है।

आप पृथ्वी पर ऐसा क्यों चाहेंगे? मुझे सच में लगता है कि आपकी वास्तविक समस्या कुछ पूरी तरह से अलग है, और दृढ़ता से सुझाव है कि आप पूछें कि आप वास्तव में क्या करने का इरादा रखते हैं।

लेकिन सिर्फ फॉर्म को संतुष्ट करने के लिए, यहाँ एक तरीका है:

from itertools import chain, starmap, product
tuple(chain.from_iterable(starmap(product, t)))
0
Veky 8 पद 2018, 06:50