【问题标题】:Python remove words in every string from listPython从列表中删除每个字符串中的单词
【发布时间】:2017-08-19 04:01:31
【问题描述】:

所以我有一个列表,其中每个元素都有一个句子形式的字符串,就像这样

a = ["This is a sentence with some words.", "And this is a sentence as well.", "Also this right here is a sentence."]

我想要对这个列表做的是只保留每个字符串的第三个和第四个单词,所以最后我想要一个类似的列表

b = ["a sentence", "is a", "right here"]

我认为要做的第一件事是在空格后拆分列表,所以像

for x in a:
    x.split()

但是我对如何继续有点困惑。上面的循环应该基本上每个句子产生一个列表,其中每个单词都是一个自己的元素。我想过这样做

e = []
for x in a:
    x.split()
    a = x[0:2]
    a = x[2:]
    e.append(a)

但不是删除单词,而是删除字符,我得到以下输出

['is is a sentence with some words.', 'd this is a sentence as well.', 'so this right here is a sentence.']

我不确定它为什么会产生这种行为。我已经坐了一段时间了,可能错过了一些非常愚蠢的事情,所以我非常感谢一些帮助。

【问题讨论】:

  • x.split() 的结果不会以任何方式存储,并且效果不会像您想象的那样发生在 x 中。

标签: python list split slice


【解决方案1】:

当您执行x.split() 时,输出不会对x 本身生效,它会生成一个字符串列表,因为strings 是不可变的:

lst = s.split(),

然后加入你想要的项目:

e.append(' '.join(lst[2:4]))

【讨论】:

  • @Brian no pblm ;)
【解决方案2】:

没有东西可以修改字符串,它们是不可变的。您只能从中获取数据。正如其他人所说,您需要存储.split()的值。

列表是可变的,但对它们进行切片也不会就地修改它们,它会创建一个新的子列表,您需要将其存储在某个地方。总的来说,可以这样做:

e = [' '.join(x.split()[2:4]) for x in a]

如果你不熟悉的话,整个事情就是一个列表理解。 .join() 将子列表转换回字符串。

【讨论】:

  • @AChampion 谢谢,没有意识到他们最终想要字符串。
  • 这段代码可能会回答这个问题,但你的答案会得到一些解释。
  • 不确定这是否决它的好理由......补偿。
  • @vascowhite 更好吗?
  • 这似乎是解决我的问题的最pythonic的解决方案,有点超出我的技能水平,但很高兴知道,谢谢!
【解决方案3】:

字符串是不可变的。 x.split() 返回字符串列表,但不修改 x。但是,您没有捕获该返回值,因此它会丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-02
    • 2022-01-26
    • 2017-03-27
    • 2011-02-02
    • 2011-03-31
    • 1970-01-01
    • 2015-01-02
    • 2013-03-04
    相关资源
    最近更新 更多