我希望能够获取列表中的值,并验证其是否为字符串中的整数,然后将其转换为整数并删除非整数的任何内容,然后返回列表。
我已经尝试过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]。
答案 0 :(得分:1)
这应该是技巧:
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]
此代码基本上只用数字值构造一个新列表(使用list comprehension),并将它们转换为整数(忽略所有其他值)。
您的解决方案有多个问题,即:
i
是lst
中的项目,而不是索引。这是因为使用符号for i in lst
时要遍历列表。如果您想在那里建立索引,正确的方法是像这样:for i in range(len(lst))
。lst
中突变了turnListToInt
,但是您没有返回列表。int(lst[i])
是无用的(假设i
是lst
的索引,不在您的代码中),您正在将lst
的元素转换为int,您实际上并不会将该值存储在任何地方,例如:lst[i] = int(lst[i])
会更有意义。答案 1 :(得分:0)
您的turnListToInt
几乎是正确的。按照书面说明,它不会返回任何内容,因此您应确保返回任何内容。
此外,当您执行for i in lst
时,i是列表中的每个项目。如果需要索引,可以使用方便的Python函数enumerate,该函数将返回索引和项目。
但是,在这种情况下,我们不需要索引。我建议构造一个全新的列表,并仅在有数字时才附加到列表:
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
语句。您可以print
几乎可以使用任何变量或对象,并且可以获得更多信息。
@Rafael正确地指出,在迭代过程中直接编辑lst
不是一个好主意。碰巧的是,我的代码的先前版本可用于“ 2和5”输入。相反,我创建了一个新列表并将其追加到列表中。另一种解决方案是枚举列表的反向版本,这样就不会混淆删除的索引。