无法在列表中转换为str(python)

时间:2016-03-08 23:00:27

标签: python list for-loop type-conversion

def prepare_for_sort(st):
 nums = str(st).split()
 for each in nums:
    each = int(each)
 print(nums)

st是一个数字字符串,如" 20 50 4 8 4 64 6 47 8"。 Nums必须是整数数组。为什么这不起作用?

4 个答案:

答案 0 :(得分:0)

这不起作用,因为您的变量each是对某个对象的引用:首先,对于同样包含在列表中的对象,然后是整数对象。但是,each绝不会与您要操作的内容列表相关联。

您可以就地操作列表:

for index, value in enumerate(nums):
    nums[index] = int(value)

或者您可以改为创建新列表:

nums = [int(value) for value in nums]

答案 1 :(得分:0)

正如您目前所拥有的那样,您正在尝试从for循环内部修改列表中的值,但这不起作用,因为您只是重新分配变量{{1在for循环中。 for循环将简单地丢弃此值,以便将each分配给列表中的下一个项目。您对each所做的任何更改都将被废弃,因为它们完全独立于each列表。

您实际上可以通过列表理解来实现目标。

nums

或者如果你真的想在循环中这样做。您可以使用循环索引,以便实际修改列表。

nums = "20 50 4 8 4 64 6 47 8"
actual_nums = [int(n) for n in nums.split()]

答案 2 :(得分:0)

如果您可以以任何方式避免它,在您循环播放列表时不要修改列表的元素。它只会让你陷入困境。 相反,试试这个:

def prepare_for_sort(st):
    nums = str(st).split()
    new_nums = []
    for each in nums:
        new_nums.append(int(each))
    print(new_nums)

或者,甚至更短,使用列表理解:

def prepare_for_sort(st):
    nums = str(st).split()
    new_nums = [int(x) for x in nums]
    print(new_nums)

答案 3 :(得分:0)

试试这个:

def prepare_for_sort(st):
    nums = str(st).split()
    arrNums = [int(each) for each in nums]
    return arrNums

当然,您需要确保函数接收的字符串始终只有整数和空格。