1

我有一个清单。假设它有 10 个项目长。它们都是字符串类型的列表项。我试图找到一种简单的方法将第 3 到第 10 项更改为整数类型对象,同时将前 2 项保留为字符串。蟒蛇 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 个

4

4 回答 4

10

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

>>> 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]

不同之处在于,在后一种情况下,您创建一个新的listwhere 就像在前者中一样更新list就地

@Ashwini 提到,Python 3, map 返回一个 map 对象而不是一个列表,因此您可能希望通过list调用传递它或者更好地使其成为列表理解

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

或者

l[2:] = list(map(int, l[2:]))
于 2013-01-18T08:20:11.870 回答
2

您可以使用列表理解:

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

>>> mylist
['0', '1', 2, 3, 4, 5, 6, 7, 8, 9]
于 2013-01-18T08:23:18.597 回答
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),

那么也许列表不是数据结构的最佳选择。考虑使用 atuple或 adict代替。模块中也有一些很好的扩展collections

于 2013-01-18T08:17:53.040 回答
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]
于 2013-01-18T13:42:03.583 回答