整数列表中的数字字符串?

时间:2017-10-27 23:35:59

标签: python

例如,我被赋予了转换一串混合数字(“1 3 5 8 10”)的任务,我的目标是将这些数字作为整数放入列表中。

我有知识和诀窍来分割字符串和int()它们将它们转换为整数,但问题在于我是怎么做的。 我遇到的具体问题是循环字符串,查找字符并将其转换为整数。
当它循环并达到10(或任何2位数字)时,它会将每个数字转换为自己的数字;所以:10将是[1,0],而不是[10]。

请原谅我这里乱七八糟的代码,我一直试图看看印刷品每一步的内容是什么:

def iq_test(numbers):
    print(numbers)
    nums = []
    numbers.split(" ")
    nums.append(numbers)
    print (numbers)
    for char in numbers:
        if char == " ":
            del char
        else:
            nums.append(int(char))  # Problem arises here, where a 2 digit number is being added to the list as 2 separate numbers
    print(nums)

编码还是很新的,所以如果你发现我遇到了一个重大的逻辑问题,如果你向我指出,我会很感激。

4 个答案:

答案 0 :(得分:2)

首先,numbers.split(" ")本身并没有做任何有用的事情。将其分配给变量。此外,如果您不提供参数,它将始终在空格上分割,因此您可以使用它。

nums = numbers.split()

这样,您应该使用for num in nums循环分割元素,而不是循环输入字符串的字符

在任何情况下,您都可以通过使用list-comprehension来应用该int函数并返回整数列表来缩短所有这些。

并且您已经定义了一个函数,因此您应该return该值,而不仅仅是打印它。

nums = [int(s) for s in numbers.split()] 
return nums

然后你会print(iq_test("1 2 3 10"))

答案 1 :(得分:1)

您可以使用正则表达式:

import re
s = "1 3 5 8 10"
final_data = list(map(int, re.findall('\d+', s)))
print(final_data)

输出:

[1, 3, 5, 8, 10]

答案 2 :(得分:0)

def iq_test(numbers):
    nums = []
    for num in numbers.split():
        nums.append(int(num)) 

我猜...你可以(而且可能应该)只做一个列表理解

 nums = [int(num) for num in numbers.split()]

答案 3 :(得分:0)

您使用错误的数组进行迭代并进行错误的转换:

def iq_test(numbers):
    print(numbers)
    nums = []
    for number in numbers.split(" "):
         nums.append(int(number))
    print(nums)