【问题标题】:python compare string in list with item starting with \r\npython将列表中的字符串与以\r\n开头的项目进行比较
【发布时间】:2016-11-15 11:44:50
【问题描述】:

好吧,假设我有一个列表。

l = ['a', '\r\nb']

还有一个要搜索的已知项目。

search = 'b'

如果我输入

search in l

它返回False。但是如果我输入。

for item in l:
    search in item

我会收到

False
True

后一个对我来说很有意义,因为'b''\r\nb'中。但是为什么哦为什么'b'不在['a', '\r\nb']

【问题讨论】:

  • 搜索到的值不在按值比较的列表中,这是正常的
  • in 只会在列表中搜索完全匹配。
  • 你真的关心\r\n吗?为什么不.strip 列表中的所有内容,所以你从一个更明智的地方开始?那么'b' in ['a', 'b'] 将是真的。完全不清楚为什么你会对这种行为感到惊讶——你会期待什么,例如l.index('b') 是吗?你认为它应该一直对每个item 进行部分匹配吗?这将是非常低效的。
  • 那么在in 中使用列表和单个字符串有区别吗?
  • @jonrsharpe 是的。当然我可以迭代列表并剥离每个项目。但这不是我想做的。我问的是关键字in 的行为。

标签: python string python-2.7 compare


【解决方案1】:

因为在第一种情况下 (search in l),它会尝试为 list 的任何元素与您的 search 术语精确匹配。

当你尝试递归遍历每个元素并匹配它在它成功找到的元素中的发现。

【讨论】:

  • 嗯,我明白了。 in只查看它自己的子集。在我看来,在两个示例中都应该以相同的方式进行比较。我现在明白为什么不是这样了。首先,我认为我必须对 \r\n 做点什么。但显然不是。这简直是​​愚蠢的。
【解决方案2】:

因为您的列表项是 'a' 和 '\r\nb',所以当您在列表中进行搜索时,它会比较每个项目 == 'b' 及其 FALSE。

'b' 是列表中第二项的子字符串。 '\r\nb' 中的 'b' 为 TRUE(您的第二次测试),因为它会搜索 '\r\nb' 中的子字符串 'b'

【讨论】:

  • 谢谢。教学解释。
猜你喜欢
  • 1970-01-01
  • 2019-09-07
  • 2021-12-28
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多