Python-我的for循环只将列表的一半从str转换为int

时间:2015-12-26 18:44:02

标签: python string python-3.x for-loop integer

我希望我的代码循环遍历列表中的每个项目并将其从str转换为int,但它只转换列表的一半并按不规则的顺序。 我的代码:

for item in list:
    list.append(int(item))
    list.remove(item)
print (list)

例如,如果列表是['5','6','3','5','6','2','6','8','5','4',' 2','8']

决赛将是['6','8','5','4','2','8',3,6,2,6,5,5]

只有一半转换而不是按顺序。

我可以用另一种方式做到这一点,但是这样做的时间要长得多,所以想要解决这个问题并添加我对for循环的了解。

我对Python的知识和经验很少,所以我很可能不会理解,除非它是基本的并且解释了行话。

5 个答案:

答案 0 :(得分:5)

使用list comprehension

l = ['5', '6', '3', '5', '6', '2', '6', '8', '5', '4', '2', '8']

output = [int(i) for i in l]
print(output)
[5, 6, 3, 5, 6, 2, 6, 8, 5, 4, 2, 8]

如果您不理解列表理解,可以使用简单的for循环:

l1 = []
for i in l:
     l1.append(int(i))

print(l1)
[5, 6, 3, 5, 6, 2, 6, 8, 5, 4, 2, 8]

答案 1 :(得分:3)

上面的两个答案都很好,但为什么你的代码不起作用也应该得到解决。

首先,您在迭代时更改列表。这是你不应该做的事情。它可能会导致问题,例如你的问题。

其次,remove方法删除它遇到的符合给定参数的列表中的第一个元素,它也应该小心使用。

第三,不应将list用作变量名。因为它是一个内置的类。

for item in list:
    print (list)
    list.append(int(item))
    list.remove(item)

# Prints
['5', '6', '3', '5', '6', '2', '6', '8', '5', '4', '2', '8']
['6', '3', '5', '6', '2', '6', '8', '5', '4', '2', '8', 5]
['6', '5', '6', '2', '6', '8', '5', '4', '2', '8', 5, 3]
['5', '6', '2', '6', '8', '5', '4', '2', '8', 5, 3, 6]
['5', '2', '6', '8', '5', '4', '2', '8', 5, 3, 6, 6]
['2', '6', '8', '5', '4', '2', '8', 5, 3, 6, 6, 5]
['6', '8', '5', '4', '2', '8', 5, 3, 6, 6, 5, 2]
['6', '8', '5', '4', '2', '8', 3, 6, 6, 5, 2, 5]
['6', '8', '5', '4', '2', '8', 3, 6, 5, 2, 5, 6]
['6', '8', '5', '4', '2', '8', 3, 6, 2, 5, 6, 5]
['6', '8', '5', '4', '2', '8', 3, 6, 2, 6, 5, 5]
['6', '8', '5', '4', '2', '8', 3, 6, 2, 6, 5, 5]
['6', '8', '5', '4', '2', '8', 3, 6, 2, 6, 5, 5]

如你所见,没有按预期工作

答案 2 :(得分:2)

为什么不使用这样的东西:

l = list(map(int, l))

它只是在int的每个项目上调用函数l。 这是doc

答案 3 :(得分:0)

虽然其他两个答案为您提供了将字符串列表转换为整数的更好方法,但它们确实无法回答您的问题。您的主要问题是,当您的for循环对其进行操作时,您正在改变(更改)列表结构。你不应该改变列表结构(删除元素或追加),因为循环迭代变量item不同步。无法将item重新同步到新的列表结构。

顺便说一句:这不是一个随机的顺序。这是其他所有项目。

您可以像这样编写转换循环,因为您不会改变列表的结构,只会改变单个元素:

for i in xrange(len(l)):
    l[i] = int(l[i])

不要这样写:

for item in l:
   item = int(item)

它不会改变单个列表元素,即使您认为它确实如此。它与Python迭代器的工作方式有关。

答案 4 :(得分:0)

试试这个:

>>> list = ['5', '6', '3', '5', '6', '2', '6', '8', '5', '4', '2', '8']
>>> for item in list[:]:
...     list.append(int(item))
...     list.remove(item)
... 
>>> print(list)
[5, 6, 3, 5, 6, 2, 6, 8, 5, 4, 2, 8]

说明:这里我们迭代列表的一个克隆,但是对原始列表进行操作。

PS:list是python中的关键字。应避免将其用作变量名。