【问题标题】:Checking if all entries in a list are in a string检查列表中的所有条目是否都在字符串中
【发布时间】:2018-02-09 18:39:36
【问题描述】:

我有以下代码:

sent = 'My name is Karen and I drive a black car.'
l = ['Karen', 'black']
print all(words in l for words in sent)

当我认为它会返回 true 时,这段代码的 sn-p 正在返回 False。我很困惑为什么。有人可以向我解释发生了什么吗?谢谢!

【问题讨论】:

  • 仅仅因为您在 for words in sent 中使用名称 words 并不意味着 Python 知道您需要在单词边界上拆分然后遍历这些单独的单词... 您需要来实现它。当然,正如其他人所指出的那样,无论如何您在这里尝试做的逻辑也不完全正确。
  • {'Karen', 'black'}.issubset('My name is Karen and I drive a black car.'.split()).

标签: python string list iterator


【解决方案1】:

这里有两个问题:

  1. 当您遍历一个字符串时,您会遍历每个字符。您需要遍历每个单词。在您的情况下,您可以使用str.split
  2. 您需要测试l中的所有单词是否都在sent中的单词列表中。反之亦然。

通过上述更改,您的代码将是:

>>> sent = 'My name is Karen and I drive a black car.'
>>> words = sent.split()
>>> l = ['Karen', 'black']
>>> 
>>> all(word in words for word in l)
True

【讨论】:

  • @vaultah 已修复。对于那个很抱歉。我全神贯注于其他事情,并认为我会发布答案。我想我需要多加注意。
  • @PeterDeGlopper 已修复。
【解决方案2】:

您正在遍历字符串sent,它从该字符串中获取每个字符。你必须遍历l中的单词:

all(i in sent for i in l)

【讨论】:

  • 这不一定正确。此测试是否 l 中的任何字符串是 send 的子字符串,而不是 sent 中的单词。例如,您的解决方案将错误地返回 True:sent = 'My name is Karen and I drive a RblackR car.'.
  • @ChristianDean 这超出了 OP 问题的范围。 OP 只是询问一个单词本身是否存在于sent 中,而不是作为sent 元素的子字符串存在。
【解决方案3】:

您正在遍历错误的列表并检查错误的项目

all(word in sent for word in l)

【讨论】:

  • 这不一定正确。此测试是否l 中的任何字符串是sent子字符串,而不是sent 中的单词。例如,您的解决方案将错误地为sent == 'My name is Karen and I drive a RblackR car.' 返回True
  • @ChristianDean 取决于 OP 的严格程度。问题只是想知道列表中的条目是否存在于字符串中,它没有指定它们希望它们完全作为那个词存在。
猜你喜欢
  • 2016-09-18
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 2023-04-02
  • 2018-06-24
  • 2014-01-01
相关资源
最近更新 更多