我有一个字符串列表:['1','2','3','4','5','6','7','8','9']。我尝试使用“ for循环”将字符串列表转换为整数。但令我惊讶和震惊的是,该列表包含备用字符串和整数数据类型。
我尝试了各种大小的列表,每次都转换了备用条目。
listt=['1','2','3','4','5','6','7','8','9']
for x in listt:
if type(x)==str: #So that the integer already converted does not enter into loop
intx=int(x)
listt.append(intx)
listt.remove(x)
else:
continue
print(listt)
期望:[1、2、3、4、5、6、7、8、9]
真实性:['2','4','6','8',1、3、5、7、9]
答案 0 :(得分:4)
修改要遍历的列表(append
/ remove
等)绝不是一个好主意。而是创建一个新列表:
numberlikes = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
integers = []
for num in numberlikes:
integers.append(int(num))
print(integers)
给出:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
如您所愿
答案 1 :(得分:1)
您可以按以下方式创建一个新列表:
newlist = [int(x) for x in listt if type(x) == str]
如果您正在寻找错误,请在这里:
listt.remove(x)
您不应该从要迭代的列表中删除值
答案 2 :(得分:0)
listt=['1','2','3','4','5','6','7','8','9']
for i in range(len(listt)):
x= listt[i]
if type(x)==str: #So that the integer already converted does not enter into loop
intx=int(x)
listt[i]=intx
else:
continue
print(listt)
检查此 或使用lamda函数
listt=['1','2','3','4','5','6','7','8','9']
listt = [int(x) for x in listt]
print(listt)
答案 3 :(得分:0)
考虑此示例
mylist = [*'123']
for x in mylist:
print(x)
mylist.remove(x)
print(mylist)
制作
1
3
['2']
当您遍历一个可变对象(如列表)并删除内容时,在中您遍历了它……您将弄乱了内容。
在您的情况下,您在Python试图跟踪其位置时删除了一个对象。然后,它认为将要成为下一个对象的现在是先前的对象。因此,它没有获取下一个对象,而是跳过了它。这将创建您所看到的交替模式。
不要这样做!
[*map(int, mylist)]
[1, 2, 3]