【问题标题】:Change a range of list items into integers in python在python中将一系列列表项更改为整数
【发布时间】:2013-01-18 08:13:32
【问题描述】:

我有一个清单。假设它有 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'

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

【问题讨论】:

  • 看起来您实际上是在处理 float 而不是 int。将呼叫更改为list(map(float,row[2:]))
  • 如果任何答案有帮助,请不要忘记接受它

标签: python list python-3.x range


【解决方案1】:

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

>>> 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,map 返回一个 map 对象而不是一个列表,因此您可能希望通过 list 调用传递它,或者更好地使其成为列表理解

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

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

【讨论】:

  • 在 py3x map() 中返回一个 map 对象。所以,l = l[:2] + map(int, l[2:]) 会失败。
  • @AshwiniChaudhary:我仍然坚持使用 Py2X :-) 无论如何,我同意它值得一提
  • 这里也一样,即使我几乎从不使用 3x。但由于这个问题被标记为 3x,所以,我认为值得指出。
  • 切片分配在 Python3 中工作正常,应该修复的是您尝试添加切片和 map 对象的代码。
【解决方案2】:

您可以使用列表推导:

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

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

【讨论】:

    【解决方案3】:

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

    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),

    那么也许列表不是数据结构的最佳选择。考虑改用tupledictcollections 模块中也有一些不错的扩展。

    【讨论】:

    • 哇太棒了!几个小时以来,我一直试图弄清楚这一点。谢谢!如果允许我会投票赞成
    • 哦哦。它不工作。我将 len(list) 用于我范围的第二部分。嗯。编辑:我撒谎我有 2 个列表混淆了。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 2019-04-26
      • 1970-01-01
      相关资源
      最近更新 更多