python:将字符串列表中的部分字符串与另一个列表中的项目进行比较,并生成第三个列表
python: compare part of a string from a list of strings to items in another list and generate a third list
给定一个名称列表(列表 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 中的最后一项编辑为 'card.' 而不是 'Dr'
来稍微更改上面的代码
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']
给定一个名称列表(列表 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 中的最后一项编辑为 'card.' 而不是 'Dr'
来稍微更改上面的代码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']