2017-02-12 1 views
2

목록으로 매개 변수를 취하는 함수를 작성하고 있습니다. 이 매개 변수는 문자열 목록의 목록이며 각 문자열에는 첫 번째와 마지막 이름이 공백으로 구분되어 있습니다. 나는 첫 번째 이름이 반복 될 경우 각 목록을 체크인하고, 그렇다면 반복 된 이름을 포함하는 새 목록을 작성하기로되어 있습니다. 단어는 하위 목록에서 반복되는 경우에만 반복됩니다. 예 :목록의 목록에서 문자열 조작

>>>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) 

답변

1
나는 다시 것

그 첫 번째 이름을 계산, 평평 지능형리스트에 collections.Counter를 사용하여 첫 번째 이름을 (str.partition 사용) 및 필터링 할 때 1 명 이상 발생 :

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

당신이 시도 할 수 있습니다 :

(210)

지금, 우리는 그 수보다 크거나 2.이 동일 사전을 통해 단일 반복하여 수행 할 수있는 모든 이름을 얻을 필요가 :

temp = [] 
for i in dic : 
    if dic[i] >= 2 : 
     temp.append(dic[i]) 

목록 temp 원하는 결과가 포함됩니다.

0

나는 정규식을 사용하여 각 목록에서 중복 된 이름을 따 것 :

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