Python 3.x 如何正确地将此字符串转换为整数?

Python 3.x 如何正确地将此字符串转换为整数?,python-3.x,Python 3.x,我希望能够读取列表中的值,并验证它是否是字符串中的整数,然后将其转换为整数,删除任何不是整数的内容并返回列表 我已经尝试了isinstance(),但无法使其工作,我还尝试将它们转换为不同的类型,但没有工作 def turnListToInt(lst): for i in lst: if lst[i].isdigit(): int(lst[i]) else: del lst[i] def askQuest

我希望能够读取列表中的值,并验证它是否是字符串中的整数,然后将其转换为整数,删除任何不是整数的内容并返回列表

我已经尝试了isinstance(),但无法使其工作,我还尝试将它们转换为不同的类型,但没有工作

def turnListToInt(lst):
    for i in lst:
        if lst[i].isdigit():
            int(lst[i])
        else:
            del lst[i]


def askQuestion():
    ask = input("How may I help you?")
    if ask == "":
        print("Thats Not A Valid Question")
    elif ask == "Multiply" or "multiply" or "*":
        ask = input("What Numbers?")
        numbers = ask.split();
        numbers = turnListToInt(numbers)
        print(float(numbers[0])*float(numbers[1]))
while run:
    askQuestion();

我希望list=[“2”,“and”,“5”]变成list=[2,5]。

这应该是一个技巧:

def turn_list_to_int(lst):
    return [int(v) for v in lst if v.isdigit()]


test = ["2", "and", "5"]
print(turn_list_to_int(test))
输出

[2, 5]
这段代码基本上构造了一个新的列表(使用),其中只包含数字值,并将其转换为整数(忽略所有其他值)

您的解决方案存在多个问题,即:

  • 您的
    i
    lst
    中的项目,而不是索引。这是因为当您在lst中为i使用符号
    时,您正在迭代列表。如果需要索引,正确的方法是这样做:
    for i in range(len(lst))
  • 您可以在
    turnListToInt
    中变异
    lst
    ,但不返回列表
  • int(lst[i])
    是无用的(假设
    i
    lst
    的索引,它不在您的代码中),您正在将
    lst
    的元素转换为int,但您实际上并没有将该值存储在任何位置,例如:
    lst[i]=int(lst[i])
    将更有意义
  • 当您使用for循环和索引对列表进行迭代时,因为您最初的目的是改变列表,当您同时从列表中删除项目时,for循环将在某个点尝试访问列表中不再可用的元素,因为您的列表将由于删除元素而收缩,并且索引将超出收缩列表的范围

  • 您的
    turnListToInt
    几乎正确。如文所述,它不会返回任何内容,因此您应该确保返回某些内容

    另外,当您在lst中对i执行
    操作时,i是列表中的每个项目。如果需要索引,可以使用一个方便的Python函数,它返回索引和项

    但是在这种情况下,我们不需要索引。我建议构建一个全新的列表,只有当我们有一个数字时,才添加到列表中:

    def turnListToInt(lst):
        newlist = []
        for item in enumerate(lst):
            if item.isdigit():
                newlist.append(int(item))
    
        return newlist
    
    
    def askQuestion():
        ask = input("How may I help you? ")
        if ask == "":
            print("Thats Not A Valid Question")
        elif ask == "Multiply" or "multiply" or "*":
            ask = input("What Numbers? ")
            numbers = ask.split();
            numbers = turnListToInt(numbers)
            print(float(numbers[0])*float(numbers[1]))
    while True:
        askQuestion();
    
    另一条建议是尝试在交互式控制台(命令行)中运行代码。这样你就可以马上看到结果。此外,在调试代码时,还可以添加大量的
    print
    语句。您可以
    打印
    任何变量或对象,您将获得更多信息

    更新
    @Rafael正确地指出,在遍历lst时直接编辑它不是一个好主意。巧合的是,我以前的代码版本处理的是“2和5”输入。相反,我创建了一个新列表并附加到它。另一种解决方案是在列表的反向版本上枚举,这样删除的索引就不会混淆

    + 1,为你的问题做一些努力,清楚地陈述你预期的结果(但没有达到)。如果你发现任何有用的答案并解决了你的问题,考虑通过点击相应答案旁边的嘀嗒按钮来接受一个。