Python 在列表列表中操作字符串
我正在编写一个函数,它接受一个列表作为参数。此参数是字符串列表,每个字符串包含由空格分隔的名字和姓氏。我应该检查每个列表中的名字是否重复,如果重复,则创建一个包含重复名字的新列表。该词只有在其子列表中重复时才算作重复。例如Python 在列表列表中操作字符串,python,string,list,iteration,Python,String,List,Iteration,我正在编写一个函数,它接受一个列表作为参数。此参数是字符串列表,每个字符串包含由空格分隔的名字和姓氏。我应该检查每个列表中的名字是否重复,如果重复,则创建一个包含重复名字的新列表。该词只有在其子列表中重复时才算作重复。例如 >>>findAgents( [["John Knight", "John Doe", "Erik Peterson"],["Fred Douglas", "John Stephans", "Mike Dud", "Mike Samuels"]]) 会让
>>>findAgents( [["John Knight", "John Doe", "Erik Peterson"],["Fred Douglas", "John Stephans", "Mike Dud", "Mike Samuels"]])
会让步
['John', 'Mike']
到目前为止,我已经能够遍历列表并访问名字。但我不知道如何组织它们,使它们保持在自己的区域内,这样我就可以检查是否在该区域重复了某些内容。这是我的代码:
def findAgents(listOlists):
newlist = []
x = 0
for alist in listOlists:
for name in alist:
space = name.find(" ")
firstname = (name[0:space])
print( firstname)
我会在一个扁平列表中使用
collections.Counter
重写它,计算名字(使用str.partition
),并在出现超过一次时过滤名字:
l = [["John Knight", "John Doe", "Erik Peterson"],["Fred Douglas", "John Stephans", "Mike Dud", "Mike Samuels"]]
import collections
x = [k for sl in l for k,v in collections.Counter(x.partition(" ")[0] for x in sl).items() if v>1]
print(x)
结果:
['John', 'Mike']
您可以尝试以下方法:
def func(temp) :
dic = {}
for i in temp :
for j in i :
dic[j.split(" ")[0]] = dic.get(j.split(" ")[0], 0) + 1
return dic
现在,我们需要获取计数大于或等于2的所有名称。这可以通过字典上的单个迭代来完成:
temp = []
for i in dic :
if dic[i] >= 2 :
temp.append(dic[i])
列表
temp
将包含所需的结果。我将使用正则表达式并从每个列表中提取重复的名称:
import re
names = [["John Knight", "John Doe", "Erik Peterson"],["Fred Douglas", "John Stephans", "Mike Dud", "Mike Samuels"]]
def extractDups(names):
res = []
for eachlist in names:
res.extend(re.findall(r'\b(\w+)\b.*\1', ' '.join(eachlist)))
return(res)
例如:
>>>extractDups(names)
['John', 'Mike']