आप इन दो सूची समझ को एक पंक्ति में कैसे संक्षिप्त करेंगे? मैं एक पंक्ति के रूप में कोड करना चाहता हूं। मेरा रास्ता बहुत लंबा लगता है। मुझे लगता है कि इसे कोड करने का एक और तरीका है।

y = [array[i][0] for i in range(len(array))]
x = [i for i in range(len(array))]

x, y = [i for i in range(len(array))], [array[i][0] for i in range(len(array))]
0
Vural Erdogan 30 मार्च 2018, 20:17

2 जवाब

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

मान लें कि आप 2D सूची के पहले कॉलम को इसके सूचकांकों के साथ निकालना चाहते हैं, तो आप enumerate का उलटा-zip अनपैकिंग के साथ उपयोग करेंगे:

array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x, y = zip(*enumerate([r[0] for r in array]))
print(x)
(0, 1, 2)

print(y)
(1, 4, 7)

x इंडेक्स है, और y रो वेक्टर है। जैसा कि ऊपर देखा गया है, इस पद्धति के परिणामस्वरूप आपका डेटा tuples (lists नहीं) के रूप में निकाला जा रहा है, और array खाली होने पर विफल हो जाएगा।

इसलिए, जैसा कि @user2357112 ने अपने टिप्पणी में कहा है, कृपया अपने सभी को भगाने का प्रयास न करें। एक पंक्ति में कोड - इसे तभी करें जब यह किया जा सकता है और ऐसा करने के लिए समझ में आता है।

इसके अलावा, टिप्पणियों में चर्चा का विस्तार करने के लिए, ऐसा करने का सर्वोत्तम तरीका यह होगा कि @Rakesh द्वारा उनके उत्तर:

x = list(range(len(array)))
y = [r[0] for r in array]
print(x)
[0, 1, 2]

print(y)
[1, 4, 7]

यह ऊपर वर्णित कमियों से ग्रस्त नहीं है।

6
cs95 30 मार्च 2018, 17:50
x, y = list(map(list, zip(*[(i, r[0]) for i, r in enumerate(a)]))) or ([], [])

अस्वीकरण: मुझे लगता है कि यह एक ऐसी स्थिति है जहां वन-लाइन-नेस एक बुरी चीज है।

0
ely 30 मार्च 2018, 17:29