2016-03-07 86 views
1

我有值的列表,這可以是字符串,如「串」,可以說是在一個字符串形式給定爲「2.3」用「嘗試」的列表循環操作

我要轉換數字(「N/A」 - > - 1)並保留任何其他字符串不變,而且我需要將字符串中給出的數字以浮點格式轉換爲字符串格式(「1.0 「 - > 1) 等

我好不容易纔做,如果我第一次跑遍整個列表,並轉換N/A值-1,像這樣

for i in list: 
    if i=="N/A": 
     i=-1 

,然後用

l = [int(i) for i in l] 

運行,但我仍然可能有字符串,然後其他「N/A」,我不想有麻煩試圖將它們轉換,並需要使用嘗試在第二循環中。 我該怎麼做?

這是代碼我嘗試,但我給我語法錯誤

l = [try: int(float(i)) except: pass] for i in l 

來源列表例如:[ 「1.0」, 「N/A」, 「笑」] i的需要它是[1, -1, 「笑」]

+0

你可以在之前給出你的清單的例子以及你希望它如何照顧? – Idos

+1

@Idos,我加了一個例子 – thebeancounter

+0

你不能在一個循環內改變迭代索引。 – roadrunner66

回答

2
def convert(value): 
    if value == 'N/A': 
     return -1 
    try: 
     return int(value) 
    except ValueError: 
     return value 

然後:

[convert(value) for value in values] 
+0

謝謝,工作很好 – thebeancounter

3

隨着try except,嘗試轉換爲int如果發生異常,如果它是"N/A"所以應該由-1來代替:

li = ["1.0" , "N/A" , "12" , "2.0", "Ok"] 

for i,v in enumerate(li): 
    try: 
     li[i] = int(float((v))) 
    except: 
     if(li[i] == "N/A"): 
      li[i] = -1 

li # [1, -1, 12, 2, "Ok"] 
+0

我仍然需要保留不是「NA」的字符串,我想在如果可能的話,優雅的一行循環 – thebeancounter

+0

你有另一個字符串,比如'「Ok」'而不想將它們轉換爲'-1'? – Arman

0

做在一個循環。

l = ["N/A", "3", "5", "6"] 

for idx,val in enumerate(l): 
    try: 
     l[idx] = int(val) 
    except: 
     l[idx] = -1 

print l 

輸出

[-1, 3, 5, 6] 
+0

當我嘗試在一個函數內,這不會改變列表... – thebeancounter

+0

@captainshai它應該但我認爲你應該使用Rogalski的例子,因爲它是迄今爲止最好的,在這裏。 – Kordi

0

您可以封裝嘗試 - 除了聲明自己的函數,並在列表理解使用它。

def try_int(s): 
    try: 
     return int(s) 
    except ValueError: 
     return s 

l = [try_int(i) for i in l]