python - python:将字符串列表中的部分字符串与另一个列表中的项目进行比较并生成第三个列表
问题描述
给定一个具有相应标题的名称列表(列表 A),我通过将其与包含这些标题的另一个列表(列表 B)进行比较,对其进行迭代以确定每个条目(先生、夫人、博士等)的标题并仅使用其标题创建另一个列表(列表 C)。如果列表 A 中的名称未在列表 B 中列出,则列表 C 应填写从列表 A 中提取的完整名称。
以下代码:
A = [
'Anna, Mrs. James (Nadia Elf)',
'Martin, Mr. Michael',
'Barese, Mr. Alfred',
'Amalfi, Mrs. Abby (J E V)',
'Manuel, Dr. Louis'
]
C=[]
B=['Mrs.','Mr.','Dr.']
for i in A:
for j in B:
if j in i:
C.append(j)
print(C) # prints ['Mrs.', 'Mr.', 'Mr.', 'Mrs.', 'Dr.']
打印正确的输出,这是因为 A 中包含的所有标题都显示在 B 中,但是如果我通过将列表 A 中的最后一项编辑为“卡片”来稍微更改上面的代码。而不是“博士”
A = [
'Anna, Mrs. James (Nadia Elf)',
'Martin, Mr. Michael',
'Barese, Mr. Alfred',
'Amalfi, Mrs. Abby (J E V)',
'Manuel, card. Louis'
]
C=[]
B=['Mrs.','Mr.','Dr.']
for i in A:
for j in B:
if j in i:
C.append(j)
else:
C.append(i)
print(C)
我想看看这个输出['Mrs.', 'Mr.', 'Mr.', 'Mrs.', 'Manuel, card. Louis']
但相反,它打印
['Mrs.', 'Anna, Mrs. James (Nadia Elf)', 'Anna, Mrs. James (Nadia Elf)', 'Martin, Mr. Michael', 'Mr.', 'Martin, Mr. Michael', 'Barese, Mr. Alfred', 'Mr.', 'Barese, Mr. Alfred', 'Mrs.', 'Amalfi, Mrs. Abby (J E V)', 'Amalfi, Mrs. Abby (J E V)', 'Manuel, card. Louis', 'Manuel, card. Louis', 'Manuel, card. Louis']
如何解决?
解决方案
这应该有效。在您的代码中,对于 中的每个元素B
,它都会尝试在其中找到它A
- 如果不匹配,仍会附加i
到c
A = [
'Anna, Mrs. James (Nadia Elf)',
'Martin, Mr. Michael',
'Barese, Mr. Alfred',
'Amalfi, Mrs. Abby (J E V)',
'Manuel, card. Louis'
]
C=[]
B=['Mrs.','Mr.','Dr.']
for i in A:
contains = False
for j in B:
if j in i:
contains = True
break
if contains:
C.append(j)
else:
C.append(i)
print(C)
输出:
['Mrs.', 'Mr.', 'Mr.', 'Mrs.', 'Manuel, card. Louis']
推荐阅读
- terraform - terraform route53 解析器设置
- node.js - 使用 VS Code 调试时如何解决“ReferenceError: Office is not defined”?
- mongodb - 如何在 MongoDB 中针对其他集合数据进行排序
- google-signin - 无法解析方法“setAllowNewEmailAccounts(boolean)”
- c# - 在运行时访问 DisplayClass 对象的属性
- c++ - boost ptree read_ini 使独立应用程序崩溃
- dialogflow-es - 从 zip 导入后,无法将 Dialogflow 与 Google Assistant 集成
- python - 如果数据中存在与某些条件匹配的另一行,则从 pandas DataFrame 中查找行
- android - Android Management API 的有效身份验证凭据
- ios - SSLError:[Errno 1] _ssl.c:510:错误:1409442E:SSL 例程:SSL3_READ_BYTES:tlsv1 警报协议版本