在python中将列表项的范围更改为整数

在python中将列表项的范围更改为整数,python,list,python-3.x,range,Python,List,Python 3.x,Range,我有一张单子。假设它有10个项目长。它们都是字符串类型的列表项。我试图找到一种简单的方法,将第3到第10项更改为整数类型的对象,同时将前2项保留为字符串。 Python 3.3 是的,它不太管用,所以我试着把它分成一个自己的列表,结果发生了 Traceback (most recent call last): File "project1.py", line 10, in <module> hList=list(map(int,row[2:]))

我有一张单子。假设它有10个项目长。它们都是字符串类型的列表项。我试图找到一种简单的方法,将第3到第10项更改为整数类型的对象,同时将前2项保留为字符串。 Python 3.3

是的,它不太管用,所以我试着把它分成一个自己的列表,结果发生了

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'
回溯(最近一次呼叫最后一次):
文件“project1.py”,第10行,在
hList=list(map(int,row[2:])#row是我的字符串列表的名称
ValueError:基数为10的int()的文本无效:“6.67”

我试着打印
hList
,它显示了我循环中24个索引中的前4个

当我在循环中使用索引时,这是一种罕见的情况:

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显示的切片分配

请注意,如果您使用列表和

  • 它不是齐次的(有些项目是整数,有些不是)
  • 它的长度是固定的(你事先知道它是10)

  • 那么,列表可能不是数据结构的最佳选择。考虑使用<代码>元组< /代码>或<代码> DICT<代码>。模块中也有一些不错的扩展。

    这可以通过切片分配轻松完成

    >>> 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]
    
    区别在于,在后一种情况下,您创建了一个新的
    列表
    ,其中与前一种情况一样,更新了
    列表

    @Ashwini提到,Python3,map返回一个map对象而不是一个列表,因此您可能希望通过
    list
    调用传递它,或者更好地将其设置为一个列表

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


    您可以使用列表理解:

    >>> mylist[2:] = [int(l) for l in mylist[2:]]
    
    >>> mylist
    ['0', '1', 2, 3, 4, 5, 6, 7, 8, 9]
    

    一个简单的
    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]
    

    哇,太棒了!我几个小时来一直在想这个问题。谢谢如果它让我,我会投票的。它不起作用了。我用len(list)作为我的第二部分。嗯。编辑:我撒谎说我把两个列表搞混了。在py3x中,map()返回一个
    map
    对象。所以,
    l=l[:2]+map(int,l[2:])
    将失败。@AshwiniChaudhary:我仍然坚持使用Py2X:-)无论如何,我同意在这里值得一提,即使我很少使用3x。但是由于问题被标记为3x,所以,我认为值得指出。切片分配在Python3中运行良好,应该修复的是您尝试添加切片和
    map
    对象的代码。看起来您实际上是在处理float而不是int。将调用更改为
    list(map(float,row[2:])
    如果任何答案有帮助,请不要;别忘了接受它
    [3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]