将字符串列表转换为整数时出现意外输出

时间:2019-07-01 17:06:32

标签: python

我有一个字符串列表:['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]

4 个答案:

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