【问题标题】:Python: Check if string in a list of strings does not contains variablePython:检查字符串列表中的字符串是否不包含变量
【发布时间】:2020-12-14 04:24:53
【问题描述】:

我有一个字符串列表:

my_list = ["John 123", "Johnny 232", "Jane 344"]

我想要做的是检查 my_list 中的字符串是否包含变量完全正确,但之后字符串中的其他任何内容变量无关紧要。

例如,如果我有var = "John",my_list[0] 会返回 True,但 my_list[1] 和 my_list[2] 都会返回 False。我需要检查整个列表或直到其中一个返回 True,以先到者为准。

编辑:这是我正在处理的实际代码的 sn-p:

names = []
rank, male, female = info
 for name in names:
  if male not in names:
   names.append(male + " " + rank + '\n')
  if female not in names:
   names.append(female + " " + rank + '\n')

信息是从一个 html 文件中提取的,但例如将类似于 ['123', 'John', 'Jane'],一个数字后跟一个男性姓名和一个女性姓名。我现在的问题显然是 if 语句将始终为 True,导致除了数字之外的重复条目。

【问题讨论】:

  • 使用单词边界,例如对于第一个案例搜索\bJohn\b
  • 您好!到目前为止你做了什么:D 你可以粘贴你的代码。
  • 添加了实际代码sn-p
  • @StackOffended 上面粘贴的代码
  • 您可以查看我的答案,如果它满足您的问题的解决方案:D

标签: python string variables


【解决方案1】:

您可以使用regular expressions 轻松完成。 List comprehension

import re


my_list = ["John 123", "Johnny 232", "Jane 344"]

#Just an output list for you to see the True & False output
outputlist = []


for name in my_list:
    if re.search(r'\bJohn\b',name) != None:
        outputlist.append(True)
    else:
        outputlist.append(False)



'''
#List comprehension
outputlist = [True if re.search(r'\bJohn\b',name) != None else False for name in my_list]
'''

print(outputlist)

输出:

[True, False, False]
[Finished in 0.3s]

【讨论】:

  • 这很好用,但是我如何使用变量而不是硬编码“John”来做同样的事情?我对正则表达式很糟糕哈哈
  • 你的意思是variable?包含特定字符串?您可以像这样更改正则表达式,例如 re.search(r'\b'+variable+'\b',name)
【解决方案2】:

您可以为此使用 any() 函数以及列表解析。

if any(var in item for item in my_list)

【讨论】:

  • 这不起作用。如果 var = "John",则 "John" 和 "Johnny" 都将返回 true,而只有 "John" 应该这样做。
  • @IanWaddell 啊,我忽略了这个要求。我的错。
猜你喜欢
  • 2020-02-26
  • 1970-01-01
  • 2010-10-04
  • 2019-04-11
  • 1970-01-01
  • 2013-10-26
  • 2018-06-14
  • 2013-01-01
  • 1970-01-01
相关资源
最近更新 更多