2013-01-18 57 views
0

我有一個列表。假設它有10個項目。它們都是字符串類型的列表項。我試圖找到一種簡短的方法來將第3到第10項更改爲整型對象,同時將第2項作爲字符串保留。 Python 3.3將一系列列表項目改爲python中的整數

是的,它不是很工作,所以我試圖把它分成它自己的列表,這發生了。

Traceback (most recent call last): 

    File "project1.py", line 10, in <module> 

    hList=list(map(int,row[2:]))      #row is the name of my string list 

ValueError: invalid literal for int() with base 10: '6.67' 

我試圖打印hList,它在我的循環中顯示的24的前4

+0

它看起來像你實際上是使用float處理,而比int。改變呼叫到'列表(地圖(浮動,行[2:]))' – Abhijit

+0

是這就是它的 –

+0

如果任何的答案幫助,請不要忘記接受它 – Abhijit

回答

1

這是當我使用索引在循環中難得一遇:

In [1]: l = list(map(str, range(10))) 

In [2]: l 
Out[2]: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] 

In [3]: for i in range(2, 10): 
    ...:  l[i] = int(l[i]) 
    ...:  

In [4]: l 
Out[4]: ['0', '1', 2, 3, 4, 5, 6, 7, 8, 9] 

或者像Abhijit所顯示的那樣使用切片分配。

請注意,如果您使用的列表,並...

  1. 這不是均勻(有些項目是整數,有些則不是),
  2. 它的長度是固定的(你事先知道這是10) ,

那麼也許列表不是數據結構的最佳選擇。考慮使用tupledict。在collections模塊中也有一些很好的擴展。

+0

哇哇!我一直試圖弄清楚這幾個小時。謝謝!我會upvote,如果它讓我 –

+0

呃哦。它不工作。我使用len(list)作爲範圍的第二部分。嗯。編輯:我說謊我有2個名單混淆。 –

9

這可以用切片分配

>>> l = list(map(str, range(10))) 
>>> l[2:] = map(int, l[2:]) 
>>> l 
['0', '1', 2, 3, 4, 5, 6, 7, 8, 9] 

處理這個問題的另一種方法是將其分割爲兩個表可以輕鬆完成,並且將其中的一個整數列表。

>>> l = list(map(str, range(10))) 
>>> l = l[:2] + map(int, l[2:]) 
>>> l 
['0', '1', 2, 3, 4, 5, 6, 7, 8, 9] 

不同的是,在後一種情況下,你創建一個新的list,其中如在更新前到位list

@Ashwini提到,Python 3中,地圖返回地圖對象,而不是一個列表,所以你可能想通過list調用傳遞或更好使它成爲一個列表理解

l[2:] = [int(e) for e in l[2:]] 

l[2:] = list(map(int, l[2:])) 
+0

在py3x map()中返回一個'map'對象。因此,'l = l [:2] + map(int,l [2:])'將失敗。 –

+0

@AshwiniChaudhary:無論如何我還是堅持使用Py2X :-),我同意它值得一提的 – Abhijit

+0

謝謝我試試看。 –

2

你可以使用列表理解:

>>> mylist[2:] = [int(l) for l in mylist[2:]] 

>>> mylist 
['0', '1', 2, 3, 4, 5, 6, 7, 8, 9] 
0

簡單for環能做到這一點:

my_list = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] 
new_list = [] 
for index in range(2, 10): # start at 2 because indexing starts at 0 
    my_num = float(my_list[index]) # if the number was not an integer, but a float, it is better to use float(), 
    new_list.append(my_num)  # which can handle both floats and integers 
print new_list # so you can see the result 

輸出:

[3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0] 
相關問題