2015-10-14 5 views
6

मैं एक सूची है जो कुछ इस तरह दिखता है स्ट्रिंग की एक सूची में कनवर्ट करें:या तो पूर्णांक या फ्लोट करने के लिए

['1', '2', '3.4', '5.6', '7.8'] 

मैं कैसे बदल सकता हूँ int पहले दो और तीन float करने के लिए पिछले?

मैं इस तरह देखने के लिए अपनी सूची चाहते हैं:

[1, 2, 3.4, 5.6, 7.8] 

उत्तर

10

exponentials के एक conditional inside a list comprehension

>>> s = ['1', '2', '3.4', '5.6', '7.8'] 
>>> [float(i) if '.' in i else int(i) for i in s] 
[1, 2, 3.4, 5.6, 7.8] 

दिलचस्प बढ़त मामले का प्रयोग करें। आप सशर्त पर जोड़ सकते हैं।

>>> s = ['1', '2', '3.4', '5.6', '7.8' , '1e2'] 
>>> [float(i) if '.' in i or 'e' in i else int(i) for i in s] 
[1, 2, 3.4, 5.6, 7.8, 100.0] 

isdigit का उपयोग सबसे अच्छा है, क्योंकि यह (एक comment में Steven ने उल्लेख किया) सभी किनारे मामलों का ख्याल रखता है

>>> s = ['1', '2', '3.4', '5.6', '7.8'] 
>>> [int(i) if i.isdigit() else float(i) for i in s] 
[1, 2, 3.4, 5.6, 7.8, 100.0] 
+2

'int (" 1e2 ")' –

+2

की वजह से विभिन्न सशर्त कांग्रेस मा की चिंता को संबोधित करेंगे: 'int (i) अगर i.isdigit() और फ्लोट (i)' –

+1

@ कॉंगमा: हालांकि यह सच है कि यह असफल हो जाएगा 'int (" 1e2 ") के साथ, मुझे नहीं लगता कि यह डाउनवोट योग्य है। कॉल करने के लायक होने पर मुझे लगता है कि यह समस्या विनिर्देश के बाहर है। –

6

उपयोग एक सहायक समारोह:

def int_or_float(s): 
    try: 
     return int(s) 
    except ValueError: 
     return float(s) 

तब का उपयोग फ़ंक्शन को लागू करने के लिए एक सूची समझ:

[int_or_float(el) for el in lst] 
+0

मुझे इसे हराया;) –

1

उपयोग isdigit स्ट्रिंग की विधि:

numbers = [int(s) if s.isdigit() else float(s) for s in numbers] 

या नक्शे के साथ:

numbers = map(lambda x: int(x) if x.isdigit() else float(x), numbers) 
1
def st_t_onumber(x): 
    import numbers 
    # if any number 
    if isinstance(x,numbers.Number): 
     return x 
    # if non a number try convert string to float or it 
    for type_ in (int, float): 
     try: 
      return type_(x) 
     except ValueError: 
      continue 

l = ['1', '2', '3.4', '5.6', '7.8'] 

li = [ st_t_onumber(x) for x in l] 

print(li) 

[1, 2, 3.4, 5.6, 7.8] 
6

क्यों ast.literal_eval का उपयोग नहीं?

import ast 

[ast.literal_eval(el) for el in lst] 

सभी कोने के मामलों को संभालना चाहिए। यह इस उपयोग के मामले के लिए थोड़ा हेवीवेट है, लेकिन यदि आप सूची में किसी भी संख्या-जैसी स्ट्रिंग को संभालने की उम्मीद करते हैं, तो यह ऐसा करेगा।

0

आप निम्न क्वेरी का उपयोग करके सूची संलग्न एक ही सूची के रूप में प्रदर्शित करना चाहते हैं:

item = input("Enter your Item to the List: ") 
shopList.append(int(item) if item.isdigit() else float(item)) 

यहाँ जब उपयोगकर्ता पूर्णांक मान या नाव यह सूची shopList संलग्न कर देता है और उस में इन मूल्यों को संग्रहीत करता महत्व देता में प्रवेश करती है ।

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