使用列表Python从字符串中删除数字

使用列表Python从字符串中删除数字,python,list,digits,Python,List,Digits,因此,我尝试使用0,9中的数字列表从字符串中删除数字。我已经想了很久了,但我还没想好,我将把代码放在这里,希望有人能帮我解决这个问题。我不想使用我不熟悉的方式,比如lambda或者我在stackoverflow上看到的东西 string = input("Type a string: ") numbers = ["0","1","2","3","4","5","6","7","8","9"] start = 0 for i in range(len(string)): if(stri

因此,我尝试使用0,9中的数字列表从字符串中删除数字。我已经想了很久了,但我还没想好,我将把代码放在这里,希望有人能帮我解决这个问题。我不想使用我不熟悉的方式,比如lambda或者我在stackoverflow上看到的东西

string = input("Type a string: ")

numbers = ["0","1","2","3","4","5","6","7","8","9"]
start = 0

for i in range(len(string)):
    if(string[i] == numbers[start]):
        string.remove(i)
    else:
        print("Banana")

print(string)

您不应该迭代&在迭代时尝试更改对象。字符串是不可变的(当字符串内容更改时会创建新的引用),这一事实使问题变得复杂。好吧,这不是一个好的解决方案,即使你能做到这一点,也不会有任何效果

一个简单的pythonic方法是:

new_string = "".join([x for x in string if not x.isdigit()])
(列表理解,创建一个新字符串,保留除数字字符以外的所有字符)

对于非listcomp发言人,可“翻译”为:

l = []
for x in string:
    if not x.isdigit():
       l.append(x)
new_string = "".join(l)

string=string.remove(i)
?字符串是不可变的,不能就地更改,因此任何更改字符串的操作都会返回一个新字符串。生成器表达式就足够了,可以节省一些内存。好吧,这是我在这里看到的其他东西,但我不太明白它是如何工作的,你能给我解释一下(如果不是x.isdigits(),那么x代表字符串中的x)是如何工作的吗?@Kobbi你应该读一些。@schwobasegl:不,它不会节省内存
join
需要知道大小,因此如果没有通过列表,它将构建一个列表。那只会更慢:@Jean Françoisfare是这样吗?我已经习惯了在可能的情况下使用懒惰的iterables,但这是有用的知识。对于构建不可变字符串的
join
,它绝对有意义!