(कृपया ध्यान दें कि मुझे एक ऐसा तरीका खोजने की उम्मीद है जो सूची समझ का उपयोग न करे)

मान लीजिए मेरे पास निम्न डेटा है (0,1,2 पंक्ति संख्या को अनुक्रमित करता है और [[111,20,3,4], [5,66,7,8], [9,10,11,12]] एक मूल मैट्रिक्स की पंक्तियाँ हैं)

df1 = [(0, [111, 20, 3, 4]), 
 (1, [5, 66, 7, 8]),
 (2, [9, 10, 11, 12])]

और मैं मानचित्र फ़ंक्शन के अंदर 2 लैम्ब्डा फ़ंक्शंस के साथ निम्न आउटपुट प्राप्त करना चाहता हूं। यह प्रारूप का है: (transposed_row_num, (original_row_num, value)) प्रत्येक पंक्ति के लिए जोड़े (उदाहरण के लिए, पंक्ति [111, 20, 3, 4] आदि है)।

Transposed_row_num इन पंक्तियों की स्तंभ संख्या है। उदाहरण के लिए, पंक्ति 0 में 20 में कॉलम नंबर 1 है, इसलिए यह (1,(0,20)) होना चाहिए:

 # Desired output:
 [[(0, (0, 111)), (1, (0, 20)), (2, (0, 3)), (3, (0, 4))],
  [(0, (1, 5)), (1, (1, 66)), (2, (1, 7)), (3, (1, 8))],
  [(0, (2, 9)), (1, (2, 10)), (2, (2, 11)), (3, (2, 12))]]

मैंने निम्नलिखित कोड की कोशिश की, लेकिन मुझे एक त्रुटि मिली:

map2 = map(lambda x: [x[0]] + list(map(lambda y: y[0], x[1].index(y))),
df1)
list(map2)

# ValueError: [[111, 20], [3, 4]] is not in list
1
lll 15 जुलाई 2020, 23:15

2 जवाब

  1. आप इसे नेस्टेड list comprehension के साथ कर सकते हैं जो अधिक आसान है और कोड अच्छा है

    result = [
        [(idx_in, (row[0], val)) for idx_in, val in enumerate(row[1])]
        for row in df1
    ]
    
  2. फिर बाहरी list comprehension को map ऑपरेशन में बदलें

    result = list(map(lambda row: [(idx_in, (row[0], val)) for idx_in, val in enumerate(row[1])], df1))
    
  3. फिर आंतरिक list comprehension को map ऑपरेशन में बदलें

    result = list(map(lambda row: 
             list(map(lambda idx_val: (idx_val[0], (row[0], idx_val[1])), enumerate(row[1]))), df1))
    
0
azro 15 जुलाई 2020, 23:28

यदि आप सूची समझ और गणना का उपयोग नहीं करना चाहते हैं, तो आप इसे आजमा सकते हैं:

df1 = [(0, [111, 20, 3, 4]), 
 (1, [5, 66, 7, 8]),
 (2, [9, 10, 11, 12])]
map2 = list(map(lambda row: 
          list(map(lambda val: (row[1].index(val), (row[0], val)), row[1])), df1))

आउटपुट:

map2
 [[(0, (0, 111)), (1, (0, 20)), (2, (0, 3)), (3, (0, 4))],
  [(0, (1, 5)), (1, (1, 66)), (2, (1, 7)), (3, (1, 8))],
  [(0, (2, 9)), (1, (2, 10)), (2, (2, 11)), (3, (2, 12))]]
0
MrNobody33 16 जुलाई 2020, 00:33