【问题标题】:Removing Numbers From String Using List Python使用 List Python 从字符串中删除数字
【发布时间】:2017-01-22 21:01:34
【问题描述】:

所以我尝试使用 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)

【问题讨论】:

  • string = string.remove(i)?字符串是不可变的,它们不能原地改变,所以任何改变它们的东西都会返回一个新的字符串。

标签: python list digits


【解决方案1】:

您不应该迭代并在迭代时尝试更改对象。由于字符串是不可变的(当字符串内容发生变化时会创建新的引用),这一点很复杂。好吧,这不是一个好的解决方案,而且即使你可以做到这一点,也不是高性能的。

一个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)

【讨论】:

  • 我会删除方括号。生成器表达式就足够了并节省了一些内存。
  • 好吧,这是我在这里看到的其他东西,但我不太明白它是如何工作的,你能向我解释一下如何(如果不是 x.isdigits(),则 x for in x in string)有效吗?
  • @Kobbi 你应该阅读一些documentation on the topic
  • @schwobaseggl:不,它不会节省内存。 join 需要知道大小,所以如果没有通过就会建立一个列表。那只会更慢:stackoverflow.com/questions/37782066/…
  • @Jean-FrançoisFabre 是这样吗?我已经习惯了尽可能使用惰性迭代器,但这是有用的知识。对于构建不可变字符串的join,这绝对是有道理的!
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2020-08-29
  • 2011-02-14
  • 1970-01-01
相关资源
最近更新 更多