2013-01-18 32 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] 
相关问题