我有一份清单。我们说这是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个
答案 0 :(得分: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,map返回一个地图对象而不是一个列表,所以你可能希望通过list
调用传递它或者更好地使它成为一个列表理解
l[2:] = [int(e) for e in l[2:]]
或
l[2:] = list(map(int, l[2:]))
答案 1 :(得分:2)
您可以使用列表理解:
>>> mylist[2:] = [int(l) for l in mylist[2:]]
>>> mylist
['0', '1', 2, 3, 4, 5, 6, 7, 8, 9]
答案 2 :(得分: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所示。
请注意,如果您使用列表并...
然后列表可能不是数据结构的最佳选择。请考虑使用tuple
或dict
。 collections
模块中也有一些很好的扩展。
答案 3 :(得分: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]