2013-08-30 8 views
6

मैं पूर्णांकों की एक सूची के लिए सूचियों की एक सूची बदलने की आवश्यकता की सूची।Convert सूची पूर्णांकों

से:

L1 = [[1, 2, 3, 4], [3, 7, 1, 7], [0, 5, 6, 7], [9, 4, 5, 6]] 

रहे हैं:

L2 = [1234, 3717, 0567, 9456] 

मैं अजगर एक पूर्णांक 0 से आरंभ पहचान कैसे कर सकते हैं? मामले L2[2]

अन्य सवाल यह है कि, मैं कैसे जांच कर सकते हैं एक सूची में आइटम का आदेश दिया जाता तरह?

A = [1, 2, 6, 9] ---->True 

अन्य इस से:

A == sorted(A) 

तुम लोग तेजी से कर रहे हैं। धन्यवाद!

उत्तर

5

पहला सवाल से

L = [int("".join([str(y) for y in x])) for x in L] 

किया जा सकता है दुर्भाग्य से, पूर्णांकों एक 0. के साथ शुरू नहीं करते हैं यह करने के लिए कोई तरीका नहीं है।

जांचना कि A == sorted(A) यह करने के लिए एक बिल्कुल ठीक तरीका है।

+0

सूची एल, पूर्णांक स्ट्रिंग नहीं है। मैंने आपके कोड की कोशिश की। आपका कोड तारों के लिए काम करेगा, लेकिन यह अभी भी अल्पविरामों को छोड़ नहीं देता है। – Ali

+0

>>> एल 1 = [[1, 2, 3, 4], [3, 7, 1, 7], [0, 5, 6, 7], [9, 4, 5, 6]] >> > [पूर्णांक (""। में शामिल होने के ([str (एक्स में वाई) y के लिए])) एल 1 में एक्स के लिए] [1234, 3717, 567, 9456] –

+0

भीतरी कोष्ठक के लिए कोई ज़रूरत नहीं: '" ".join (एक्स में वाई के लिए str (y) x) '। इसके अलावा, यह एक ऐसा मामला है जहां 'नक्शा' अधिक प्राकृतिक फिट जैसा लगता है: '".join (नक्शा (str, x))'। – FMc

4
L2 = [reduce(lambda x,y : 10 * x + y, l) for l in L1] 

यदि आप एक ऐसा समाधान चाहते हैं जो स्ट्रिंग्स के माध्यम से न जाए।

1
1 सवाल है, शायद अजगर 3 धर्मान्तरित के लिए

, लेकिन सादे मुझे अजगर में एक लेखन त्रुटि दे .join 2. कोशिश:

["".join(str(d) for d in x) for x in L] 

... स्ट्रिंग प्रतिनिधित्व के लिए, या

[int("".join(str(d) for d in x)) for x in L] 

(स्वरूपित आउटपुट को छोड़कर, स्ट्रिंग प्रस्तुति अग्रणी शून्यों को संरक्षित करने का एकमात्र तरीका है ... और फिर आउटपुट फ़ाइल/स्ट्रिंग के रास्ते पर केवल स्ट्रिंग रूपांतरण है।)

खोज के लिए n 2: all(A[i-1] < A[i] for i in range(1, len(A)))

>>> A = [1, 2, 6, 9] 
>>> all(A[i-1] < A[i] for i in range(1, len(A))) 
True 
+1

आप भी शामिल होने की सूची का उपयोग कर सकते हैं क्योंकि यह तेज़ होगा (मेरी मशीन पर 2x)। –

+0

टिप के लिए धन्यवाद। मैंने कभी ऐसा नहीं किया। क्या यह लंबे अनुक्रमों पर लागू होता है, या आपको लगता है कि यह केवल 4-तत्व सूची पर जेनरेटर निर्माण ओवरहेड है? –

+0

यह पायथन 3 पर लागू नहीं हो सकता है। मुझे पता चला है कि यदि आप इसे एक सूची के रूप में उपयोग कर रहे हैं, तो यह तेज़ है। लेन (इनपुट) पर परीक्षण <= 100 मिलियन सूची समझ जनरेटर पर 2x गति सुधार बनाए रखती है। मैं किसी भी बड़े परीक्षण में असमर्थ था क्योंकि इसमें काफी समय लगा। जेनरेटर के लिए संदर्भ स्विचिंग पाइथन 2 में धीमी है। –

0

आप कर सकते हैं:

L2 = [ int("1" + "".join(str(l) for l in ll1)) for ll1 in L1 ] 

शून्य रखने के लिए और प्राप्त करने के लिए:

[11234, 13717, 10567, 19456] 

लेकिन फिर आप सबसे बाईं ओर 1 रों से छुटकारा पाने की जरूरत है।

संबंधित मुद्दे