Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表列表中操作字符串_Python_String_List_Iteration - Fatal编程技术网

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']